MongoDB通过用户ID在数组内部查找对象

时间:2020-04-27 17:22:09

标签: mongodb

我有一个看起来像这样的用户对象

{
    "_id": ObjectId("string"),
    ...
    "clients": [
        {
            "_id": ObjectId("client1_string"),
            ...
        },
        {
            "_id": ObjectId("client2_string"),
            ...
        },
    ]
}

我想得到这个结果

{
    "_id": ObjectId("client1_string"),
    ...
}

我尝试返回的所有内容都向我返回了包含该客户端的用户对象,但是我想要的只是客户端自己...我在做什么错?我已经测试了从不同问题中找到的两个代码,这是最后一次带来相同结果的尝试。

users.findOne(
        { 
            '_id': ObjectId(user_id) 
        },
        {
            'clients': { $elemMatch: { '_id': ObjectId(client_id) } 
        }
})

1 个答案:

答案 0 :(得分:0)

这对我有用(别忘了.toArray())

const result = await users.aggregate([
    { $match: { '_id': ObjectId(user_id) } },
    {
        $project: {
            clients: {
                $filter: {
                    input: '$clients',
                    as: 'client',
                    cond: { $eq: ['$$client._id', ObjectId(client_id)] }
                }
            }
        }
    }
]).toArray();