鍍金池/ 問答/數(shù)據(jù)庫/ mongodb怎么查詢單條子文檔

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"}]
}

這個(gè)出來的是該文檔,但是我想得到 {id:1,name:user1} , 這語句應(yīng)該怎么寫?

回答
編輯回答
乞許

如果能確定只有一個(gè)數(shù)組元素滿足需求,最簡(jiǎn)單的寫法:

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

如果不能確定,則$只會(huì)返回第一個(gè)滿足條件的元素。想要所有的元素,需要aggregation:

db.users.aggregate([
    {$match: {"users.id": 1}},
    {
        $project: {
            users: {
                $filter: {
                    input: "$users",
                    as: "user",
                    cond: {
                        $eq: ["$$user.id", 1]
                    }
                }
            }
        }
    }
]);
2017年8月23日 15:53