【问题标题】:Mongodb: How to create an entry in array if not presentMongodb:如果不存在,如何在数组中创建一个条目
【发布时间】:2017-03-18 08:59:33
【问题描述】:

我的文档结构如下:

{
    "_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"
            ]
        }
    ]
}

现在,如果我想在日期 "12/23/2016" 后面附加更多 topics,我可以使用:

db.revision.findOneAndUpdate({id: '58be7a4cfc13ae51020002cc', data: {$elemMatch: {date: '03/17/2017'}}}, {$push: {'data.$.topics': 'java lambda'}},{upsert: true})

但是,当日期条目不存在时,如何向 data 数组添加新对象?

【问题讨论】:

标签: mongodb


【解决方案1】:

首先为所需的日期字段插入一个空的数据文档,如果它不存在的话

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

【讨论】:

  • 这似乎是一个不错的解决方案。你能告诉我 update() 方法中的最后两个参数是什么意思吗?我去了 Mongodb 的 update() 文档,但它似乎是 update(query, update, options)
  • 第一次插入,第二次多。更新了答案
  • @RajatSaxena 如果它解决了您的问题,请您接受这个答案。
猜你喜欢
  • 2016-01-17
  • 2021-09-08
  • 2017-01-09
  • 2020-09-20
  • 2023-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多