2014-02-28 197 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 ] 
}); 

您在數據庫的數據結構將匹配您的例子,因爲所有信息都應該在一個集合,你可以很容易地進行搜索,你」重新嘗試。

但是,這可能會使其他查詢執行起來更加困難,所以這取決於您的使用情況。