2017-07-04 74 views
0

我試圖向數組中添加一個新對象到我的mongodb文檔。無法將自定義對象添加到mongoDB文檔數組中

我有一個使用MongoDB的NodeJS項目,它有一個名爲「Teste」的集合,我在那裏保存一些隨機數據。

其中數據是一個名爲「ArrayTeste」的數組。目前它只保存多個字符串,因爲我將我的輸入命名爲相同的東西,所以它會自動爲我執行。

但我不想將每個元素保存爲單個字符串,我需要獲取這些信息,將它們分組到一個對象中,然後將其添加到數組中。

這裏是的NodeJS我的代碼片段:

ServicosModel.prototype.Teste = function (req, res) { 
console.log("Metodo Teste"); 
var query = 
    { 
     $push: 
     { 
      ArrayTeste: 
      { 
       Dado1: req.body.Dado1, 
       Dado2: req.body.Dado2 
      } 
     } 
    } 

console.log(query) 

this._connection.open(function (errConn, mongoClient) { 
    console.log("Entrou open") 
    if (errConn) { 
     res.end("Deu erro" + errConn); 
    } 
    mongoClient.collection("teste", function (errColl, collection) { 
     if (errColl) { 
      res.end("Deu erro" + errColl); 
     } 
     console.log("Entrou collection") 
     collection.update(query, function (errUpdate, result) { 
      console.log("Entrou update") 
      if (errUpdate) { 
       res.end("Deu erro" + errUpdate); 
      } else { 
       res.end("Deu certo " + result); 
      } 
     }); 
    }); 
}); 

} 

這裏是MongoDB的文檔結構:

{ 
"_id" : ObjectId("595bf19febbf3c14e481bc28"), 
"id" : "2", 
"Titulo" : "TItulo do negocio", 
"ArrayTeste" : [ 
    "dado1", 
    "dado2" 
] 

}

的 「ID」 參數是一個由我創建容易在以前的測試中使用的$ elemMatch,所以我不必搜索文檔的_id。

當我運行的代碼和插入內容的投入,我提出了這個錯誤:

(node:8712) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: document must be a valid JavaScript object

,我絕對沒有發生的事情的想法。應用程序只是凍結。我已經搜索了這些帖子,並嘗試了一些使用$ set和$ addToSet的東西,但同樣的錯誤仍然存​​在。

任何幫助表示讚賞,在此先感謝!

回答

0

要更新的文件,你需要兩個強制參數:

  • criteria - 選擇文件更新
  • update - 修改選定文檔

這裏是驅動程序文檔:https://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html#update

錯誤說collection.update需要一個對象(第二個參數)並且它正在接收一個函數(您的回調函數)。

爲了讓你的代碼工作:

var select = {id: '2'}; // Here we are choosing the document 

collection.update(select, query, function (errUpdate, result) { 
    if (errUpdate) { 
     res.end("Deu erro" + errUpdate); 
    } else { 
     res.end("Deu certo " + result); 
    } 
}); 
+0

奏效,非常感謝。我看到的教程將這兩個添加到一個對象中。這讓我很難理解 –

相關問題