2012-06-15 33 views
0

在mongodb中,是否有一種方法可以查詢子查詢字段的長度作爲查詢的一部分?MongoDB:獲取子查詢字段的長度作爲查詢的一部分

假設我有一個blog_post集合,並且每個帖子都有字段標題和內容(兩個文本字段)以及包含評論列表的評論字段。

我想要做這樣的事情:

db.blog_posts.find(
    {_id:ObjectId("4fd69d962fa6cd0a8e00002d")}, 
    {"title":1, "content": 1, "comments": $length} 
) 

,並取回:

{ 
    "_id" : ObjectId("4fd69d962fa6cd0a8e00002d"), 
    "title" : "Curae proin eni", 
    "content" : "Etiam lacus euismod litora malesuada tempus a adipiscing mus.", 
    "comments" : 27 
} 

這可能嗎?

回答

1

您不能返回以這種方式使用的查詢字段的長度,但你可以使用地圖縮小找到一個數組的長度:)爲了 http://www.mongodb.org/display/DOCS/MapReduce

您也可以使用db.eval(返回的數組的長度 「a」 通過創建需要_id的文檔的功能: {_id:1,一:[1,2,3]}

t = function (id) { 
     return db.eval(function (id) { 
      var t = db.test.findOne({_id:id}); 
      var total = t.a.length; 
      return total; 
     }, 
     id); 
    } 

t(1) = 3 

http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Using%7B%7Bdb.eval%28%29%7D%7D

您應該注意,howe ver,db.eval()是一個阻塞操作,所以對於長時間運行的作業,應該使用map reduce。請讓我知道,如果這不是你要找的。

+0

雖然我提供了一個使用db.eval()的例子,但我不推薦使用這個函數。 db.eval()使用Javascript,這很慢。在客戶端執行此計算會更好,或者將數組的長度存儲在其自己的字段中(在將新值附加到數組時將增加)。 – Jenna