gpt4 book ai didi

node.js - 返回 MongoDB 中具有不同字段和 1 个选择查询的整个文档

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:16 25 4
gpt4 key购买 nike

我在编写返回整个文档但仍具有 1 个不同字段的查询时遇到问题。我已经尝试过搞乱聚合,但无济于事。经过谷歌搜索一段时间后,我已经找到了这个文档:

How to efficiently perform "distinct" with multiple keys?

它描述了我需要的大部分解决方案,但我还需要过滤另一个字段。

这是我现在用来查询 TempCollection 中文档的排序列表的函数。

function getLatestUserData(UserID, callback) {
console.log("in func " + UserID);
Temp.find({ UId: UserID }).sort({ "created_at" : -1 }).exec( function (err, data) {
console.log(data + " " + err);
callback(data);
});
};

但是,我不知道如何同时进行过滤、排序和区分。

这是使用聚合的尝试,但是,阅读文章相当长一段时间,我只是无法弄清楚我需要的语法:

function getLatestUserData(UserID, callback) {
Temp.aggregate([

{"$group": { "_id": { value: "$value", SerialNumber: "$SerialNumber" } }},
{$filter : {input: "$UId", as: "UId", cond: {$U: [ "$UId", UserID ]} }}
]).exec( function (err, data) {
callback(data);
});
};

这是 TempCollection 的一部分:

/* 1 */
{
"updatedAt" : ISODate("2017-05-23T13:01:45.000Z"),
"created_at" : ISODate("2017-05-23T13:01:45.000Z"),
"UId" : "590b10221da091b2618a4913",
"value" : 36,
"SerialNumber" : "TEST2",
"_id" : ObjectId("592432b9372464833d038b80"),
"__v" : 0
}

/* 2 */
{
"updatedAt" : ISODate("2017-05-23T14:23:39.000Z"),
"created_at" : ISODate("2017-05-23T14:23:39.000Z"),
"UId" : "58f8954c3602b80552b6f1fb",
"value" : 39,
"SerialNumber" : "IIOJOIMJ",
"_id" : ObjectId("592445eb372464833d038bf4"),
"__v" : 0
}

非常感谢任何帮助!

最佳答案

您需要在 UID 上添加 $match 而不是 $filter (仅与数组字段一起使用),然后在不同键上对 created_at$group 进行 desc $sort,同时在 $first 累积运算符内使用 $$ROOT 变量来选择最新的整个文档。

类似的东西

 Temp.aggregate([
{"$match":{ "UId": UserID }},
{"$sort":{ "created_at" : -1 }},
{"$group": { "_id": { value: "$value", SerialNumber: "$SerialNumber" }, "data":{"$first":"$$ROOT"}}}
])

data 字段将包含最新的文档。

关于node.js - 返回 MongoDB 中具有不同字段和 1 个选择查询的整个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44145420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com