Nodejs | Mongoose - 查找基于多个不同字段的文档

Ana*_*nth 1 mongoose mongodb node.js

文件:

{ "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"}
Run Code Online (Sandbox Code Playgroud)

有人能帮助我,用猫鼬,如何找到具有独特的记录groupcat

从Mongoose API中distinct,我理解我只能使用一个字段.但是可以Model.distinct用来根据两个字段查找文档吗?

Der*_*ick 6

我不能给你一个Mongoose的具体例子,你的问题有点模糊.聚合等价于"但是可以使用Model.distinct来查找基于两个字段的文档吗?" 是:

db.test.aggregate( { $group: { _id: { group: "$group", cat: "$cat" } } } );
Run Code Online (Sandbox Code Playgroud)

哪个回报:

{
    "result" : [
        {
            "_id" : {
                "group" : "G1",
                "cat" : "Cat3"
            }
        },
        {
            "_id" : {
                "group" : "G1",
                "cat" : "Cat2"
            }
        },
        {
            "_id" : {
                "group" : "G1",
                "cat" : "Cat1"
            }
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

如果要查找仅出现一次的组/猫组合,则可以使用:

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

哪个回报:

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

来自http://mongoosejs.com/docs/api.html#model_Model.aggregate我了解到你可以在Mongoose中使用聚合框架,如:

YourModel.aggregate(
    { $group: { _id: { group: "$group", cat: "$cat" } } },
    function(err, result) {
        console.log(result)
    }
) 
Run Code Online (Sandbox Code Playgroud)