MongoDB找到子文档ID

时间:2012-11-26 03:52:28

标签: mongodb mongodb-java mongodb-query

我以这种方式设置架构:

{
 _id:1234,
 friends: [
           {
             "fid":1235
             "is_user":true
           },
           {
             "fid":1236
             "is_user":true
           },
           {
             "fid":1235
             "is_user":false
           }
          ]
 }

我的要求是,在_id的情况下,我需要找到(fid)设置为true的所有朋友ID is_user

我尝试了以下内容:

db.users.find({ friends: { $elemMatch : { is_app_user: true}}});

似乎在整个集合中给我回复结果,但我想要它用于ID。所以我试过了:

db.users.find({_id:1234},{friends: { $elemMatch : { is_app_user: true}}});

但这没有给我什么。此外,我需要的只是fid。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:8)

在这种情况下,你不仅需要数组中的第一个匹配元素,你必须使用aggregation framework而不是find

db.users.aggregate([
    // Find the matching document
    { $match: { _id: 1234 }},
    // Duplicate the document for each element of friends
    { $unwind: '$friends' },
    // Filter the documents to just those where friends.is_user = true
    { $match: { 'friends.is_user': true }},
    // Only include fid in the results
    { $project: { _id: 0, fid: '$friends.fid'}}
]);