Javascript 如何查找一个属性匹配但另一个属性不同的x个文档

Javascript 如何查找一个属性匹配但另一个属性不同的x个文档,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,好的,想象一个这样的集合: [ { "_id" : ObjectId("5b5f76eb2bfe4a1e9c473bd2"), "machine" : "NY-D800", "level" : "Fatal", }, { "_id" : ObjectId("5b5f76eb2bfe4a1e9c473bd2"), "machine" : "NY-D889", "level" : "Fatal", }, { "_id" : ObjectId("

好的,想象一个这样的集合:

[
{
    "_id" : ObjectId("5b5f76eb2bfe4a1e9c473bd2"),
    "machine" : "NY-D800",
    "level" : "Fatal",
},
{
    "_id" : ObjectId("5b5f76eb2bfe4a1e9c473bd2"),
    "machine" : "NY-D889",
    "level" : "Fatal",
},
{
    "_id" : ObjectId("5b5f76eb2bfe4a1e9c473bd2"),
    "machine" : "NY-D889",
    "level" : "Info",
},
{
    "_id" : ObjectId("5b5f76eb2bfe4a1e9c473bd2"),
    "machine" : "NY-D800",
    "level" : "Fatal",
},
...
]
我想查找
级别设置为“致命”的文档,但我不想返回重复的文档(重复的
机器
)。例如,“NY-D800”被列了两次,并带有“致命”字样,所以我希望它只返回一次。最后,我想将返回的值限制为10项

重述:

  • 级别
    =“致命”
  • 仅由
    机器确定的唯一值
  • 最多10份文件
  • MongoDB和Mongoose有可能吗

    我试过这个:

     Logs
        .distinct({'level': 'Fatal'})
        .limit(10)
        .exec(function (err, response){
            var result = {
                status: 201,
                message: response
            };
            if (err){
                result.status = 500;
                result.message = err;
            } else if (!response){
                result.status = 404;
                result.message = err;
            }
            res.status(result.status).json(result.message);
        });
    
    您可以先使用
    级别
    “致命”,然后使用
    机器

    Logs.aggregate([
      { "$match": { "level": "Fatal" }},
      { "$group": {
        "_id": "$machine",
        "level": { "$first": "$level" },
      }},
      { "$limit": 10 },
      { "$project": { "machine": "$_id", "level": 1, "_id": 0 }}
    ])
    

    您的解决方案非常有效!谢谢再跟进一次。如果我的文档的属性不仅仅是机器和级别…有没有办法包括其他属性?您可以使用
    $first
    ,就像我在
    级别中使用的那样