gpt4 book ai didi

mongodb - 嵌入文档中的“更新插入”

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

我目前有以下数据集:

{  
'component_id':1,
'_locales':[
{
'url': 'dutch',
'locale': 'nl_NL'
}
] (etc)
}

如果我想用语言环境更新行,我会运行类似于:

db.components.update(
{'component_id': 1, '_locales.locale': 'nl_NL'},
{$set: {'_locales.$': {'url': 'new url','locale':'nl_NL'}},
true
);

这工作正常,直到语言环境不存在:

db.components.update(
{'component_id': 1, '_locales.locale': 'en_US'},
{$set: {'_locales.$': {'url': 'new url','locale':'en_US'}},
true
);

由于 component_id 上存在唯一索引,这将引发提示重复键的异常。

有没有办法自动添加具有不同语言环境的新“文档”并在它已经存在时更新它?根据使用位置运算符的文档将不适用于“更新插入”。

最佳答案

您可以使用 $addToSet添加到集合中,确保没有重复的数组元素,但这不适用于您的“更新”案例。

为了做你想做的事,你需要将你的数据结构更改为:

{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
}
}
}

现在您可以通过以下方式对 nl_NL 语言环境进行更新:

db.components.update( { component_id: 1 }, { $set: { '_locales.nl_NL.url' : 'new url' } }, true );

新的语言环境也可以使用,例如:

db.components.update( { component_id: 1 }, { $set: { '_locales.en_US.url' : 'American' } }, true );

您可能还想考虑将语言环境作为嵌套对象的一部分,例如:

{
"_id" : ObjectId("4f9519d6684c8b1c9e72e367"),
"component_id" : 1,
"_locales" : {
"nl_NL" : {
"url" : "dutch"
"locale" : "nl_NL"
}
}
}

这使得在某些情况下更容易检索数据。

关于mongodb - 嵌入文档中的“更新插入”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10277174/

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