我每天每米都有一份文件.如何在数据数组中添加另一个子文档并创建整个文档(如果它不存在)?
{
"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"
}
Run Code Online (Sandbox Code Playgroud)
现在运行:
db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}})
Run Code Online (Sandbox Code Playgroud)
我们得到更新版本:
db.meters.findOne()
{
"_id" : ObjectId("4f8e95a718bc9c7da1e6511a"),
"config" : {
"someparam" : 4.5
},
"data" : [
{
"Meter" : 123456789,
},
{
"Meter" : 1234
}
],
"key" : "20120418_123456789"
}
Run Code Online (Sandbox Code Playgroud)
再次运行相同的命令,结果不变.
注意:您可能会增加这些文档,特别是如果此字段无限制且通过以这种方式更新导致频繁(相对昂贵)的移动 - 您应该在这里查看有关如何缓解此问题的想法:
http://www.mongodb.org/display/DOCS/Padding+Factor#PaddingFactor-ManualPadding
| 归档时间: |
|
| 查看次数: |
4017 次 |
| 最近记录: |