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
,就像我在级别中使用的那样