在其中使用ref查找嵌入式文档数组中的特定ObjectId

时间:2016-03-15 21:02:46

标签: mongoose

这是我的架构

var Schema = new Schema{
     name:String
     topics:[{item:{type: ObjectId, ref: 'tag'},comment:String}]
}

所以'主题'字段包含一系列嵌入式文档。其中每个都包含一个ref和一个字符串'comment'。 有一种方法我可以找到一个特定的ref id(项目字段)?

我尝试了一些投影,但这有点意义你不觉得吗? Obiouvsly不起作用.. :)

    Model
    .find(
        { topics: {
            $in: [{     item: ObjectId("56e0aa684e7c55c414a51d82")      }]
        }
        },{name:1})
    .exec(function(err, data) {
        res.json(data)
    });

编辑:我想出了这个解决方案:

           Model
            .find(
                {'topics':
                    {$elemMatch :
                        {
                            item: "56e0aa684e7c55c414a51d82"
                        }
                    }
                }
            )
    .exec(function(err, data) {
        res.json(data)
    });

1 个答案:

答案 0 :(得分:1)

请尝试这个

Model.find({'topics.item': "56e916772acfbbf805612555"}, {name: 1})
    .exec(function(err, data){
        if (err)
            console.log(err);
        else
            console.log(data);
    });

使用数据进行测试

{ "_id" : ObjectId("56e916772acfbbf805612559"), 
  "name" : "topic1", 
  "topics" : [
          { "item" : ObjectId("56e916772acfbbf805612555"), 
            "comment" : "tag1", 
            "_id" : ObjectId("56e916772acfbbf80561255b") }, 
          { "item" : ObjectId("56e916772acfbbf805612556"), 
            "comment" : "tag2", 
            "_id" : ObjectId("56e916772acfbbf80561255c") } ]
}

返回

[ { name: 'topic1', _id: 56e916772acfbbf805612559 } ]