2014-02-28 148 views
1

例子:猫鼬的对象数组值找到第对象数组的

[ 
    { 
     "_id": "72", 
     "title": "Some title", 
     "comments": [ 
      { 
       "title": "title 1", 
       "_id": "0", 
      }, 
      { 
       "title": "title 2", 
       "_id": "1", 
      }, 
      { 
       "title": "title 3", 
       "_id": "2", 
      } 
     ] 
    }, 
    (...) 
] 

我想找到他们的评论标题(填充)

var ArticleSchema = new Schema({ 
    title: { type: String }, 
    comments: [{ type: Schema.ObjectId, ref: 'Comment' }] 
}); 

我尝试了很多东西像一些文章:

var options = { 
    criteria: { 
     'comments.title': regex 
    } 
}; 

Article 
    .find(options.criteria, function (err, articles) { 
     if (err) throw err; 
     res.json(articles); 
    }) 
    .populate('comments'); 

但不工作...

感谢

  • 更新*

这里我的新代码:三个嵌套find()方法和两个forEach()这样

+0

可能重复的[Mongoose查询填充字段](http://stackoverflow.com/questions/17535587/mongoose-query-a-populated-field) – JohnnyHK

+0

谢谢@JohnnyHK我试了另一种方式,如果你可以采取看看我的更新:页 – user3366589

回答

0

在您的更新(或类似的东西)的代码是唯一的出路用你当前的模式来做到这一点。但是,我会提出另一个选择,它可能会或可能不会与您的其他用例一起使用。

首先,只是为了确保我们都在同一页上,我相信你的当前设置实际上是这个样子的时候保存到数据库:

文章集合(单次入境)

{ 
    _id: ObjectId("566d820ff8633ffc494998c5"), 
    title: "Example Post", 
    comments: [ 
     ObjectId("eed7ceadc82d23441cdbab8c") 
    ] 
} 

评论集(一个条目)

{ 
    _id: ObjectId("eed7ceadc82d23441cdbab8c"), 
    title: "Example Comment on Example Post" 
} 

这是它的工作原理,当你ref另一个架构。我提出这个问题是因为这与你的文章对象的例子不同。

与关系数据库(如MySQL)不同,MongoDB没有连接。通过运行查询来填充基本工作,然后对所有注释ID运行find命令。但是,MongoDB有子文档。如果你要你的ArticleSchema改变这样的事情:

var ArticleSchema = new Schema({ 
    title: { type: String }, 
    comments: [ CommentSchema ] 
}); 

您在数据库的数据结构将匹配您的例子,因为所有信息都应该在一个集合,你可以很容易地进行搜索,你”重新尝试。

但是,这可能会使其他查询执行起来更加困难,所以这取决于您的使用情况。