MongoDB findAndModify:>>>查找和更新文档数组中的对象
MongoDB findAndModify: >>> find and update object in document's array
问题:
我尝试照顾文档数组中的对象并对其进行更新。
下面的语法给了我想要的对象,但我不知道如何更新这个对象。我尝试在查找和修改中使用此语句,但似乎我无法在查找和修改方法中使用$elemMatch
db.users.find({"username":"username"},{"array":{$elemMatch:{"name":"name"}}})
我尝试更改的示例 JSON
[{
"_id": ObjectId("5501b8fb77382c23704543fd"),
"username": "ker",
"password": "ker",
"character": "pet",
"visits": [],
"pets": [{"name": "Jura", "kind": "dog", "age": "2"}, {"name": "Ala", "kind": "dog", "age": "5"}]
}, {
"_id": ObjectId("5501b8fb77382c23704543fd"),
"username": "mer",
"password": "mer",
"character": "pet",
"visits": [],
"pets": [{"name": "Ita", "kind": "cat", "age": "6"}, {"name": "Esa", "kind": "cat", "age": "1"}]
}]
总结:
我必须在集合中找到文档,然后在文档的数组中找到对象并更新此对象。
所以我的逻辑看起来像这样
db.collection.findAndModify({query:{Find Document In Collection THEN in document's array(pets) find object}, update:{$set:{New Values For Object}}})
您可以运行以下查询以实现所需的内容:
//findAndModify will always refer to one document
db.collection.findAndModify({
//Find the desired document based on specified criteria
query: { username: 'mer', pets: { $elemMatch: { name: 'Esa'}}},
//Update only the elements of the array where the specified criteria matches
update: { $set: { 'pets.$.name': 'CHANGED'}}
});
此查询将更新第二个文档:
{
"username" : "mer",
"password" : "mer",
"character" : "pet",
"visits" : [ ],
"pets" : [
{
"name" : "Ita",
"kind" : "cat",
"age" : "6"
},
{
"name" : "CHANGED",
"kind" : "cat",
"age" : "1"
}
]
}
您可以在此处阅读有关使用 $
位置运算符更新文档的更多信息
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象