MongoDB 在数组中查找元素(子文档)

标签 mongodb mongodb-query

我正在尝试更新我的集合中子文档数组中的数组字段。我的收藏看起来像这样:

{
 _id:"1",
 employees:[{ eid:"2",
              ename:"test",
              is_user:true
             },
             { eid:"3",
              ename:"test2",
              is_user:true
             }
           ]
}

我正在尝试更新 is_user 状态,并按以下方式尝试:

db.users.update({_id:"1","employees.eid":"2"},{$set:"employees.$.is_user":true},true);

我也尝试过:

db.users.update({_id:"1","employees.$.eid":"2"},{$set:"employees.$.is_user":true},true);

但是当我运行查找时,对于查询:

db.users.find({_id:"1","employees.eid":"2"});

它仍然没有给我任何东西。有人能帮我解决这个问题吗? 谢谢..

最佳答案

这确实有效。

> db.test.insert({_id:"1", employees:[{ eid:"2", ename:"test", is_user:true }, { eid:"3", ename:"test2", is_user:true } ] })
> db.test.find({_id:"1","employees.eid":"2"});
{ "_id" : "1", "employees" : [  {   "eid" : "2",    "ename" : "test",  "is_user" : true },  {   "eid" : "3",    "ename" : "test2", "is_user" : true } ] }

对于 $ 运算符,您想使用它,如下所示:

> db.test.insert({_id:"1", employees:[{ eid:"2", ename:"test", is_user:false }, { eid:"3", ename:"test2", is_user:false } ] })
> db.test.find({_id:"1", "employees.eid":"2", "employees.is_user": true});
> db.test.update({_id:"1", "employees.eid":"2"}, {$set: {"employees.$.is_user": true}});
> db.test.find({_id:"1", "employees.eid":"2", "employees.is_user": true});
{ "_id" : "1", "employees" : [  {   "eid" : "2",    "ename" : "test",   "is_user" : true },     {   "eid" : "3",    "ename" : "test2",  "is_user" : false } ] }

请注意数组中两个对象上的 is_user 插入如何设置为 false,并且更新后匹配对象从 false 更新> 到 true,这就是您要找的吗?

关于MongoDB 在数组中查找元素(子文档),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336968/

相关文章:

node.js - Mongoose - (MongoDB) 中不同集合的相同模式

mongodb-query - MongoDB 查询返回 3 个点而不是答案

mongodb - 用mongo同时pull和addtoset

php - mongodb中按年龄组分组

mongodb - 如何在 MongoDB 中存储 blob 数据?

python - 多个键的总计

javascript - Meteor Js , 将图像存储到 mongoDB

java - MongoDB 和 Java 驱动程序 : Range Query

javascript - Nodejs - 如何使用express和mongoose按url中的名称进行路由?

mongodb - 如何更新一个 MongoDB 文档的 _id?