2013-02-06 95 views
1

文件:Nodejs |貓鼬 - 查找文檔基於多個不同的領域

{ "group" : "G1", "cat" : "Cat1", "desc": "Some description 1"} 
{ "group" : "G1", "cat" : "Cat2", "desc": "Some description 2"} 
{ "group" : "G1", "cat" : "Cat1", "desc": "Some description 3"} 
{ "group" : "G1", "cat" : "Cat3", "desc": "Some description 4"} 
{ "group" : "G1", "cat" : "Cat2", "desc": "Some description 4"} 

有人可以幫助我,用貓鼬,如何尋找具有獨特groupcat的記錄?

從Mongoose API的distinct,我明白我可以只使用一個字段。但是,Model.distinct可以用於基於兩個字段查找文檔嗎?

+0

看['Model.aggregate'(http://mongoosejs.com/docs/api.html#model_Model。聚合)爲該類型的查詢。 – JohnnyHK

+0

謝謝。總計解決了我的問題。 – Ananth

回答

6

我不能給你一個貓鼬的具體例子,你的問題有點含糊。 「但是Model.distinct可以用於基於兩個字段查找文檔嗎?」是:

db.test.aggregate({ $group: { _id: { group: "$group", cat: "$cat" } } }); 

將返回:

{ 
    "result" : [ 
     { 
      "_id" : { 
       "group" : "G1", 
       "cat" : "Cat3" 
      } 
     }, 
     { 
      "_id" : { 
       "group" : "G1", 
       "cat" : "Cat2" 
      } 
     }, 
     { 
      "_id" : { 
       "group" : "G1", 
       "cat" : "Cat1" 
      } 
     } 
    ], 
    "ok" : 1 
} 

如果你想找到只發生一次組/貓組合,那麼你可以使用:

db.test.aggregate(
    { $group: { 
     _id: { group: "$group", cat: "$cat" }, 
     c: { $sum: 1 }, 
     doc_ids: { $addToSet: "$_id" } 
    } }, 
    { $match : { c: 1 } } 
); 

將返回:

{ 
    "result" : [ 
     { 
      "_id" : { 
       "group" : "G1", 
       "cat" : "Cat3" 
      }, 
      "c" : 1, 
      "doc_ids" : [ 
       ObjectId("5112699b472ac038675618f1") 
      ] 
     } 
    ], 
    "ok" : 1 
} 

http://mongoosejs.com/docs/api.html#model_Model.aggregate我知道你可以使用聚合框架在貓鼬這樣的:在使用

YourModel.aggregate(
    { $group: { _id: { group: "$group", cat: "$cat" } } }, 
    function(err, result) { 
     console.log(result) 
    } 
) 
+0

這很完美。我只是MongoDB的新手。謝謝。 – Ananth