gpt4 book ai didi

node.js - 检索与数组中的最大值匹配的子文档

转载 作者:可可西里 更新时间:2023-11-01 10:03:05 24 4
gpt4 key购买 nike

我在mongodb中有如下数据结构

[
{
"id" : "unique id 1",
"timeStamp" : "timeStamp",
"topicInfo" : [
{
topic : "topic1",
offset : "offset number",
time: 1464875267637
},
{
topic : "topic2",
offset : "offset number",
time: 1464875269709
},
{
topic : "topic3",
offset : "offset number",
time : 1464875270849
}
]
},
{
"id" : "unique id 2",
"timeStamp" : "timeStamp",
"topicInfo" : [
{
topic : "15",
offset : "offset number",
time : 1464875271884
},
{
topic : "topic2",
offset : "offset number",
time : 1464875273887
},
{
topic : "topic3",
offset : "offset number",
time : 1464875272848
}
]
}
]

现在我想找到所有具有名为“topic2”的主题的条目,并且时间值与“topicInfo”数组中的其他对象相比是最大的。我还想按“时间戳”对它们进行排序。从示例代码中,查询应返回第二个对象。我无法编写查询任何帮助将不胜感激。

最佳答案

执行此操作的最佳方式是在 MongoDB 3.2 或更新版本中。我们需要$project我们的文件并使用 $filter运算符返回符合我们条件的“topicInfo”数组的子集。从 MongoDB3.2 开始,我们可以使用 $max$project阶段的condition表达式中,对返回值进行逻辑运算。

管道的最后阶段是 $match使用 $exists 过滤掉那些带有空“topicInfo”的文档的阶段元素查询运算符和 dot notation访问数组中的第一个元素。这也减少了通过线路发送的数据量以及用于在客户端解码文档的时间和内存。

db.collection.aggregate([
{ "$project": {
"topicInfo": {
"$filter": {
"input": "$topicInfo",
"as": "t",
"cond": {
"$and": [
{ "$eq": [ "$$t.topic", "topic2"] },
{ "$eq": [ "$$t.time", { "$max": "$topicInfo.time" } ] }
]
}
}
}
}},
{ "$match": { "topicInfo.0": { "$exists": true } } }
])

关于node.js - 检索与数组中的最大值匹配的子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37594665/

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