gpt4 book ai didi

arrays - MongoDB查询通过数组中的值检索一个数组值

转载 作者:IT老高 更新时间:2023-10-28 13:28:50 28 4
gpt4 key购买 nike

我有一个文档集合,每个文档都包含一组子文档。每个子文档都有一个时间值。我正在尝试根据子文档中的时间查看是否可以返回子文档。

我知道我可以使用 $slice 检索子文档,但 $slice 只给我一个特定的索引或范围和偏移量。

示例时间!

文档是这样的......

{ 
id: 1234,
type: 'a',
subs: [
{ time: 123001, val: 'a' },
{ time: 123002, val: 'b' },
{ time: 123003, val: 'c' }
]
}

如果我使用 find({}, {subs: {$slice: [2,1]}}) 进行查询,我会得到类似的结果:

{ id: 1234, type: 'a', subs: [{ time: 123002, val: 'b' }]}

我想检索该记录,例如,不是基于偏移量,而是基于 123002 时间值。

可能吗?

去!

最佳答案

因为您已经设计了数据,所以这是不可能的。

在 MongoDB 中,查询返回整个文档。您可以过滤特定字段,但如果字段的值是一个数组,它就会停在那里。

当你有“对象数组”时,你要么必须$slice,这不是你想要的,要么你必须对数据进行不同的建模。

在您的情况下,以下结构将使您的查询成为可能:

{ 
_id: 1234,
type: 'a',
subs: {
'123001': { val: 'a' },
'123002': { val: 'b' },
'123003': { val: 'c' }
}
}

请注意我如何将 subs 更改为 JSON 对象而不是数组。现在您可以执行以下查询并仅获取您要查找的时间:

find( { _id: 1234 }, { 'subs.123002': 1 } )

这里明显的权衡是您将不得不更改使用更改文档的方式。不能在 subs 上使用 $push,不能查询 {'subs.time': 1234},而是必须查询 {'subs.1234': { $exists:true} }.

关于arrays - MongoDB查询通过数组中的值检索一个数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6557508/

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