1

ドキュメント:

{ "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"}

groupMongoose を使用して、一意のレコードとを持つレコードを見つける方法を教えてもらえますかcat?

Mongoose API for から、distinct使用できるフィールドは 1 つだけであることがわかりました。しかしModel.distinct、2 つのフィールドに基づいてドキュメントを検索するために使用できますか?

4

1 に答える 1

6

Mongoose の具体的な例を挙げることはできません。あなたの質問は少しあいまいです。「しかし、Model.distinct を使用して、2 つのフィールドに基づいてドキュメントを検索できますか?」に相当する集計。は:

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から、Mongoose で集約フレームワークを次のように使用できることがわかりました。

YourModel.aggregate(
    { $group: { _id: { group: "$group", cat: "$cat" } } },
    function(err, result) {
        console.log(result)
    }
) 
于 2013-02-06T14:48:25.670 に答える