2011-11-19 21 views
0

的後文件看起來是這樣的:如何查詢最近的評論MongoDB中

{ 
    ... 
    comments: [{ 
    _id:... 
    body:... 
    createDate:... 
    }, 
    ... 
    ] 
} 

如何獲得近10個評論從收藏?

+0

根據以下您的意見,您應更新您的問題以更清楚地描述您的要求。 – mdahlman

回答

0

如果您的評論總是在可預知的順序(即最新的第一個,或最新的最後一個),那麼你就可以查詢時使用$slice操作只返回完整comments領域的一個子集:

test> db.foo.save({name: "hello", comments: [1, 2, 3, 4, 5]}) 
test> db.foo.find({}, {comments: {$slice: 3}}) 
{ "_id" : ObjectId("4ec7d1c8e72da9b6f31e2528"), "name" : "hello", "comments" : [ 1, 2, 3 ] } 
test> db.foo.find({}, {comments: {$slice: -3}}) 
{ "_id" : ObjectId("4ec7d1c8e72da9b6f31e2528"), "name" : "hello", "comments" : [ 3, 4, 5 ] } 

你可以閱讀更多關於控制返回的字段在http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

+0

我的意思是從集合中的所有文檔中獲取最近的評論,而不僅僅是來自單個文檔。 – alice

+0

啊,我明白了。在這種情況下,您可能需要按照@RameshVel的建議以不同方式對數據進行建模,或者可以使用Map-Reduce將註釋提取到單獨的集合中並進行查詢。 – dcrosta

+0

這是非常常見的用例,就像在博客上顯示最近的評論一樣。我開始錯過關係數據庫:( – alice

-1

無法從嵌入式文檔中部分選擇項目。無論它將返回整個文檔的數組。您必須在應用程序代碼中執行過濾器。這是唯一的方法。

但我建議有一個單獨的收集意見。這樣你可以跳過&限制設置。

+0

-1)您可以使用'$ slice'操作符來檢索數組中嵌入文檔的特定子集,並選擇正常字段來返回一組特定的非數組嵌入式文檔。 – dcrosta

+0

哦,我的壞..我錯過了一個:( – RameshVel