在列出的两个示例中,您只是将字段 ( 'minute'
) 设置为特定值,它是第一次更新时添加的唯一原因是因为字段本身不存在,因此必须创建。
很难确定你在这里拍摄的确切目标,但我认为你可以做的是稍微改变你的模式,这样它'minute'
就是一个数组。然后,您可以使用$push
添加值,无论它们是否已经存在或者$addToSet
您不想重复。
我不得不稍微修改您的文档以使其在 shell 中有效,因此我的_id
(和其他一些字段)与您的略有不同,但它仍然应该足够接近以进行说明:
db.foo.find({'_id': 'u12345CHA-2RU020130304'}).pretty()
{
"_id" : "u12345CHA-2RU020130304",
"metadata" : {
"adaptor_id" : "CHA-2RU",
"array_serial" : 12345,
"date" : ISODate("2013-03-18T23:28:50.660Z"),
"processor_id" : 0
}
}
现在让我们添加一个minute
包含文档数组而不是单个文档的字段:
db.foo.update({'_id': 'u12345CHA-2RU020130304'}, { $addToSet : {'minute': { '16': {'45': 1.6693091}}}})
db.foo.find({'_id': 'u12345CHA-2RU020130304'}).pretty()
{
"_id" : "u12345CHA-2RU020130304",
"metadata" : {
"adaptor_id" : "CHA-2RU",
"array_serial" : 12345,
"date" : ISODate("2013-03-18T23:28:50.660Z"),
"processor_id" : 0
},
"minute" : [
{
"16" : {
"45" : 1.6693091
}
}
]
}
然后,为了说明添加,添加一个稍微不同的条目(因为我正在使用$addToSet
这是添加新字段所必需的:
db.foo.update({'_id': 'u12345CHA-2RU020130304'}, { $addToSet : {'minute': { '17': {'48': 1.6693391}}}})
db.foo.find({'_id': 'u12345CHA-2RU020130304'}).pretty()
{
"_id" : "u12345CHA-2RU020130304",
"metadata" : {
"adaptor_id" : "CHA-2RU",
"array_serial" : 12345,
"date" : ISODate("2013-03-18T23:28:50.660Z"),
"processor_id" : 0
},
"minute" : [
{
"16" : {
"45" : 1.6693091
}
},
{
"17" : {
"48" : 1.6693391
}
}
]
}