2017-03-18 17 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

相關問題