mongodb怎么查询单条子文档

db.users.find()
{
_id : ObjectId(5a7d12871541ff3ed0bb9c79) ,
users: [{"id": 1, "name":"user1"}, {"id": 2, "name": "user2"}]
}

mongodb 支不支持直接查询出子文档?

db.users.find({ "user.id" : 1 })
{
_id : ObjectId(5a7d12871541ff3ed0bb9c79) ,
users: [{"id": 1, "name":"user1"}, {"id": 2, "name": "user2"}]
}

这个出来的是该文档,但是我想得到 {id:1,name:user1} , 这语句应该怎么写?

阅读 2.9k
1 个回答

如果能确定只有一个数组元素满足需求,最简单的写法:

rs0:PRIMARY> db.users.find({ "users.id" : 1 }, {"users.$.id": 1})
{ "_id" : ObjectId("5a7d12871541ff3ed0bb9c79"), "users" : [ { "id" : 1, "name" : "user1" } ] }

如果不能确定,则$只会返回第一个满足条件的元素。想要所有的元素,需要aggregation:

db.users.aggregate([
    {$match: {"users.id": 1}},
    {
        $project: {
            users: {
                $filter: {
                    input: "$users",
                    as: "user",
                    cond: {
                        $eq: ["$$user.id", 1]
                    }
                }
            }
        }
    }
]);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进