Mongodb:如果不存在,如何在数组中创建一个条目

时间:2017-03-18 08:59:33

标签: mongodb

我有一个类似如下的文档结构:

{
    "_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数组添加新对象?

1 个答案:

答案 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})