2017-03-15 62 views
1

我剛開始學習mongodb並開始爲自己的業務的個人應用程序。Mongo插入/更新 - 一對多模型

我會在這裏解釋我的問題,因爲我無法自己解決,我嘗試了很多方法。

我創建一個對象是這樣的:

db.morosos.insert({ 
"idlor": "XXXXX", 
"comunidad": "XXXXX", 
"vivienda": "XXXXX", 
"demandado": "XXXXX", 
"importe": "XXXXX", 
"datos": [ 
    { 
     "fecha": "XXXXXX", 
     "dato": "XXXXXX" 
    }], 
"date": new Date("<dd-mm-YYYY>")}) 

然後我要添加新的「DATOS」新的「出生日期」和新的「拿督」之類的數組。

我嘗試使用:

db.morosos.updateOne(
    { "idlor" : "XXXXX" }, 
    { $inc: { "datos" : { "fecha": "XXXXX", "dato": "XXXX" } } } ) 

db.morosos.updateOne(
    { "idlor" : "XXX" }, 
    { $push: { "datos" : { "fecha": "XXXXX", 
     "dato": "XXXX" } } } ) 

db.morosos.update(
    { "idlor" : "XXXX" }, 
    { 
     $addToSet: { 
      "datos": { 
       "fecha": "XXXXX", 
       "dato": "XXXXX" 
       } 
      } 
     } ) 

而且任何人的作品就像我想,它只是改變了信息或扔我一個失敗,如:所以此刻我不

WriteResult({ 
    "nMatched" : 0, 
    "nUpserted" : 0, 
    "nModified" : 0, 
    "writeError" : { 
      "code" : 16837, 
      "errmsg" : "Cannot apply $addToSet to a non-array field. Field named 'datos' has a non-array type Object in the document _id: ObjectId('58c81ba0fb02f3066e2af169')" 
    }}) 
WriteResult({ 
    "nMatched" : 0, 
    "nUpserted" : 0, 
    "nModified" : 0, 
    "writeError" : { 
      "code" : 16837, 
      "errmsg" : "The field 'datos' must be an array but is of type Object in document {_id: ObjectId('58c81ba0fb02f3066e2af169')}" 
    }}) 

不知道該怎麼做,我仍然在尋找如何解決它。

謝謝。

回答

0

編輯:你確定你正在使用支持updateOne命令的mongodb服務器3.2或更高版本嗎?如果不是,請使用.update()命令,而不是.updateOne()

db.morosos.updateOne(
    { "idlor" : "XXX" }, 
    { $push: { "datos" : { "fecha": "XXXXX", 
     "dato": "XXXX" } } } ) 

應該工作,但你的更新查詢{ "idlor" : "XXX" }不匹配的樣本文件。

我改變idlor相匹配的樣本文檔(XXX到XXXXX)

> db.morosos.updateOne(
... { "idlor" : "XXXXX" }, 
... { $push: { "datos" : { "fecha": "XXXXX", 
...   "dato": "XXXX" } } } ) 

和推動工作就好

> db.morosos.findOne() 
{ 
    "_id" : ObjectId("58c9890a57c5133b63c05b86"), 
    "idlor" : "XXXXX", 
    "datos" : [ 
     { 
      "fecha" : "XXXXXX", 
      "dato" : "XXXXXX" 
     }, 
     { 
      "fecha" : "XXXXX", 
      "dato" : "XXXX" 
     } 
    ], 
} 
+0

感謝嘗試幫助,但兄弟,XXX是公正,例如穿上寫信息。使用X作爲變量,這裏認爲XXX與XXXXX相同。 –

+0

你確定mongodb服務器3.2或更高版本有updateone命令?確切的命令似乎工作在我的3.2在Ubuntu上 –

+0

我使用mLab免費服務器。 mongod版本:3.2.11(MMAPv1) –