gpt4 book ai didi

Mongodb upsert 嵌入文档

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

我每天每米有一份文件。如果他不存在,如何在数据数组中添加另一个子文档并创建整个文档?

{  "key": "20120418_123456789",  "data":[     {     "Meter": 123456789,     "Dt": ISODate("2011-12-29T16:00:00.0Z"),     "Energy": 25,     "PMin": 11,     "PMax": 16     }  ],  "config": {"someparam": 4.5}}

我可以为此目的使用 upsert 吗?

如果文档存在,结果将是:

{  "key": "20120418_123456789",  "data":[     {     "Meter": 123456789,     "Dt": ISODate("2011-12-29T16:00:00.0Z"),     "Energy": 25,     "PMin": 11,     "PMax": 16     },     {     "Meter": 123456789,     "Dt": ISODate("2011-12-29T16:15:00.0Z"),     "Energy": 22,     "PMin": 13,     "PMax": 17     }  ],  "config": {"someparam": 4.5}}

提前致谢

最佳答案

我认为您想要的是 $addToSet 命令 - 只有当它不存在时才会将元素推送到数组中。为简洁起见,我稍微简化了您的示例:

db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
}
],
"key" : "20120418_123456789"
}

现在运行:

db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})

我们得到了更新的版本:

db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
},
{
"Meter" : 1234
}
],
"key" : "20120418_123456789"
}

再次运行相同的命令,结果不变。

注意:您可能会增加这些文档,特别是如果此字段是无限的并且通过以这种方式更新导致频繁(相对昂贵)移动 - 您应该在这里查看有关如何缓解这种情况的想法:

http://www.mongodb.org/display/DOCS/Padding+Factor#PaddingFactor-ManualPadding

关于Mongodb upsert 嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206673/

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