2017-03-18 55 views
0

我有一个文件结构如下所示: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数组时的日期条目不存在?

+0

我只是mongodb入门,但看起来像这样:https://docs.mongodb.com/manual/reference/operator/update/addToSet/#up._S_addToSet –

+0

也在这里看起来像它:http://stackoverflow.com/questions/13987365/how-to-insert-an-element-to-mongodb-internal-list –

+1

@jeff ery_the_wind谢谢你,$ addToSet帮助我处理重复条目。但是,如何添加类似'{date:“03/18/2017”,主题:['js']}'这样的条目不存在并且'find'子句失败? –

回答

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

这似乎是一个很好的解决方案。你能告诉我update()方法中最后两个参数表示什么?我去了Mongodb的'update()'文件,但它似乎是'更新(查询,更新,选项)'。 –

+0

第一次插入,第二次插入。更新回答 – Rahul

+0

@RajatSaxena如果它解决了您的疑虑,您能否接受这个答案。 – Rahul

相关问题