我有一个类似如下的文档结构:
{
"_id" : ObjectId("58be819769f922b8427e7f10"),
"id" : "58be7a4cfc13ae51020002cc",
"source" : "facebook",
"source_id" : "b37f5e43-ea3f-46d2-b2b0-b8f55e923933",
"data" : [
{
"date" : "5/8/2016",
"topics" : [
"Vectorworks",
"Statistics",
"Flight Planning",
"HTK",
"Custom Furniture"
]
},
{
"date" : "7/22/2016",
"topics" : [
"FDR",
"NS2",
"Power Plants"
]
},
{
"date" : "12/23/2016",
"topics" : [
"LTV",
"MMS"
]
}
]
}
现在,如果我想将更多topics
附加到日期"12/23/2016"
,我可以使用以下方式执行此操作:
db.revision.findOneAndUpdate({id: '58be7a4cfc13ae51020002cc', data: {$elemMatch: {date: '03/17/2017'}}}, {$push: {'data.$.topics': 'java lambda'}},{upsert: true})
但是,当日期条目不存在时,如何向data
数组添加新对象?
答案 0 :(得分:2)
首先插入所需日期字段的空数据文档(如果尚未存在)
db.revision.update( {id: '58be7a4cfc13ae51020002cc', "data.date" : {$ne : '03/17/2017' }} ,
{$addToSet : {"data" : {'date' : '03/17/2017'}} } ,
false , //<-- upsert
true ); //<-- multi
然后使用您设计的更新查询更新相同内容
db.revision.findOneAndUpdate({id: '58be7a4cfc13ae51020002cc', data: {$elemMatch: {date: '03/17/2017'}}}, {$push: {'data.$.topics': 'java lambda'}},{upsert: true})