gpt4 book ai didi

mongodb - 用另一个列表(MongoDB 或 Scala)替换模型子列表

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

我的文档结构如下:

{
"name":"CategoryChildLevel2",
"parentId":"2",
"otherAttribute":"anyVal",
"breadcrumb":[
{
"name":"RootCategory",
"id":"1"
},
{
"name":"CategoryChildLevel1",
"id":"2"
},
{
"name":"CategoryChildLevel2",
"id":"3"
}
]
}

我想要的是能够运行这样的查询:

替换以

开头的面包屑数组
      {
"name":"RootCategory",
"id":"1"
},
{
"name":"CategoryChildLevel1",
"id":"2"
}

将此子序列替换为

      {
"name":"RootCategory",
"id":"1"
},
{
"name":"AnotherCategory",
"id":"4"
}
{
"name":"AnotherCategory2",
"id":"5"
}

这样最后的结果就是

{
"name":"CategoryChildLevel2",
"parentId":"2",
"otherAttribute":"anyVal",
"breadcrumb":[
{
"name":"RootCategory",
"id":"1"
},
{
"name":"AnotherCategory",
"id":"4"
},
{
"name":"AnotherCategory2",
"id":"5"
},
{
"name":"CategoryChildLevel2",
"id":"3"
}
]
}

我们可以在 MongoDB 中做到这一点吗?或者至少检索我们应该更新的项目(array startsWith 查询),使用正常的查询语言或 map/reduce?

最佳答案

从 Mongo 2.2 开始,您可以使用数组 dot notation在更新的查询选择器中执行此操作:

db.test.update({
'breadcrumb.0.id': '1',
'breadcrumb.1.id': '2'
}, {
$set: {
'breadcrumb.1': {
name: "AnotherCategory",
id: "4"
}
}
}, {multi: true})

在以前的版本中,您必须使用 $where 来执行此操作在 update 中查询选择器,如下所示:

db.test.update({
'breadcrumb.id': '2',
// Check the name fields as well here, if necessary.
$where: "this.breadcrumb.length > 1 && this.breadcrumb[0].id === '1' && this.breadcrumb[1].id === '2'"
}, {
$set: {
'breadcrumb.1': {
name: "AnotherCategory",
id: "4"
}
}
}, { multi: true})

查询的 'breadcrumb.id': '2' 组件将有助于提高性能,因为它将限制慢速 $where 将拥有的文档数量进行操作。

关于mongodb - 用另一个列表(MongoDB 或 Scala)替换模型子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13592090/

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