findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
findAndModify, How to make operations on document's array search objects and change fields values
我试图在文档的数组中找到一个对象,并更新其字段。
db.rescuemodels.findAndModify({
query: {
"features": {
$elemMatch: {
"properties.title": "W"
}
}
},
update: {
$set: {
"features": {
"properties": {
"title": "XXX"
}
}
}
}
})
查询很好,结果是一个匹配的元素,但如何使更新方法在这个例子中只更改一个字段title
?因为现在它创建了新的数组或对象,并清理了旧的数组。
MongoDB具有用于此目的的"Dot Notation",以及用于引用数组中匹配元素的位置$
运算符:
db.rescuemodels.findAndModify({
"query": { "features.properties.title":"W" },
"update": { "$set": { "features.$.properties.title":"XXX" } }
})
请注意,只有当存在单个阵列时,这才有效,如中所示
{
"features": [
{ "properties": { "name": "A" } },
{ "properties": { "name": "W" } }
}
}
如果你正在嵌套数组,那么MongoDB无法在"外部"数组之外的位置运算符中匹配:
{
"features": [
{ "properties": [{ "name": "A" }, { "name": "W" }] },
]
}
姿态匹配在那里不起作用,因为您不能执行features.$.properties.$.name
,并且匹配的元素索引将是0
而不是1
,因为这指的是外部数组。
还要注意,在nodejs下,.findAndModify()
的MongoDB驱动程序语法与shell语法非常不同。"查询"answers"更新"部分是单独的参数,而不是shell使用的文档形式,
要更新数组"features"中的单个元素,可以使用位置运算符$。您的查询看起来像这样。。。
db.rescuemodels.findAndModify({
query: {
"features": {
$elemMatch: {
"properties.title": "W"
}
}
},
update: {
$set: {
"features.$.properties.title": "XXX"
}
}
})
相关文章:
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用数组向下搜索Javascript对象
- 如何搜索JavaScript对象并更改值
- 具有嵌套对象数组的 Javascript 对象的递归搜索函数
- 在禁用ng的情况下搜索JSON对象(AngularJS)
- 搜索包含值的json对象键,然后取消设置
- jQuery - 在对象数组中搜索
- 如何基于键搜索充满对象的数组并返回特定对象
- 以有效的方式搜索对象列表 mongo
- findAndModify,如何对文档进行操作's数组搜索对象并更改字段值
- Lodash搜索对象属性并修改值
- 使用ng类(AngularJS)搜索JSON对象
- 如何在制作角度为2的搜索管道时过滤javascript对象
- 请求一个完整的响应对象,而不是紧凑的响应对象foursquare场地搜索api
- 在对象数组中搜索字符串
- 在 JavaScript 中从一个对象搜索到另一个对象的键/值对
- 对象搜索只在第一次工作
- Jquery对象搜索
- JavaScript对象搜索并获取所有可能的节点
- 如何在测试完成工具中等待对象搜索