gpt4 book ai didi

嵌入文档数组中的 Mongodb 排序数组

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

我有以下收藏

[{
_id: 1
"origins": [
{
'depth': 100,
'magnitudes': [
{ 'magval': 5 }, { 'magval': 6 }, { 'magval': 7 }
]
},
{
'depth': 90,
'magnitudes': [
{ 'magval': 5 }, { 'magval': 6 }, { 'magval': 7 }
]
}
]
},
{
_id: 2
"origins": [
{
'depth': 100,
'magnitudes': [
{ 'magval': 5 }, { 'magval': 6 }, { 'magval': 7 }
]
},
{
'depth': 90,
'magnitudes': [
{ 'magval': 5 }, { 'magval': 6 }, { 'magval': 7 }
]
}
]
}

使用这样的查询(pymongo):

collection.update(
{},
{
'$push': {
'origins': {
'$each': [],
'$sort': {'depth': -1}
}
}
}, multi=True, upsert=True
)

...我可以就地更新我的收藏,以便嵌入的起源数组按深度场降序排序。

问题是......我如何对作为每个原始对象的子对象的嵌入式大小对象数组执行类似的就地排序?我希望 origins 内的大小按 magval 降序排列。

最终输出应该像这样存储回数据库中:

{
"origins": [
{
'depth': 100,
'magnitudes': [
{ 'magval': 7 }, { 'magval': 6 }, { 'magval': 5 }
]
},
{
'depth': 90,
'magnitudes': [
{ 'magval': 7 }, { 'magval': 6 }, { 'magval': 5 }
]
}
]
}

最佳答案

在 MongoDB v3.6 中,您可以使用 array update operators $[ ] .此运算符指示更新运算符应修改指定数组字段中的所有元素。

使用您的示例文档,即:

db.collection.update({}, 
{
"$push": {
"origins.$[].magnitudes":{
$each:[],
$sort:{ "magval": -1 }
}
}
},
{"multi":true, "upsert":true}
)

话虽如此,请重新考虑您的data modelling方法;在数组的数组中存储值可能会给查询/更新带来困难。

关于嵌入文档数组中的 Mongodb 排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47490430/

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