gpt4 book ai didi

mongodb - 返回匹配元素后的子文档数组元素

转载 作者:可可西里 更新时间:2023-11-01 09:47:45 27 4
gpt4 key购买 nike

我有一个基本上看起来像这样的文档:

{
_id: ObjectId("5b980578db509b467960ef50"),
items: [
{
_id: ObjectId("5b980578db509b467960ef90"),
date: 2010-10-10T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef91"),
date: 2010-10-11T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef92"),
date: 2010-10-12T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef93"),
date: 2010-10-13T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef94"),
date: 2010-10-14T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef95"),
date: 2010-10-15T00:00:00.000Z
}
]
}

我正在尝试构建一个查询,我可以在其中获取所有 Items after 我拥有的 ObjectId(即 ObjectId("5b980578db509b467960ef92")).

我的查询结果应该是这样的:

{
_id: ObjectId("5b980578db509b467960ef50"),
items: [
{
_id: ObjectId("5b980578db509b467960ef93"),
date: 2010-10-13T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef94"),
date: 2010-10-14T00:00:00.000Z
},
{
_id: ObjectId("5b980578db509b467960ef95"),
date: 2010-10-15T00:00:00.000Z
}
]
}

另外,我想要在给定 Item 的相应 date 值之后的所有 Items

我目前使用两种查询方法,我根据 ObjectID 获取匹配的 Item,然后使用 date 值查找所有 Items 之后。

是否有一种“更好”的方法可以在一个查询中执行此操作?

最佳答案

您可以使用$indexOfArray 找到匹配元素的索引,并使用$slice 获取3.4 中从匹配索引到数组末尾的所有元素。本质上获取最后的元素直到匹配索引。

db.colname.aggregate([
{"$project":{
"items":{
"$slice":[
"$items",{
"$multiply":[
{"$subtract":[
{"$size":"$items"},
{"$add":[{"$indexOfArray":["$items._id",ObjectId("5b980578db509b467960ef92")]},1]}
]},
-1
]
}
]
}
}}
])

关于mongodb - 返回匹配元素后的子文档数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282486/

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