MongoDB插入variables名作为键(Node.JS)

Node.JS,MONGODB, 不使用Mongoose

我有一个我正在保存的文件。 当我使用UPSERT时,它将如此构build数据:

{ "_id" : ObjectId("573a123f55e195b227e7a78d"), "document" : [ {"name" : "SomeName" } ] } 

当我使用INSERT时,将其全部插入到根级别上:

 { "_id" : ObjectId("573a123f55e195b227e7a78d"), "name" : "SomeName" } 

这显然会导致很多不一致之处。 我尝试了各种各样的东西。 我已经尝试了各种方法,如findOneAndReplace,用Upsert更新,我试过replace$ setOnInsert。 当Upsert似乎参与时,这一切都是一样的。

我试图使用文档[0]来访问数组的第一个块,但是会引发错误…'意外令牌['

我已经尝试了各种方法,通过各种文档挖掘了几个小时,并且search了其他人有这个问题的高低,但似乎没有任何人logging良好的问题。

任何人有任何build议,以确保所有的字段都在根级别,而不是嵌套在variables名下? 下面的相关代码。

 findReplace: function(db, document, collection) { var dbCollection = db.collection(collection); var filter = document.name; return new Promise(function(resolve, reject) { dbCollection.updateOne({ "name" : filter }, { document }, { upsert: true }, function(err, result) { if (err) { console.log('error', err) reject(err); } console.log("Found Document and Upserted replacement Document"); resolve([{'status' : 'success'}]); }); }); } 

当你这样做:

 { document } 

您正在创build一个包含document属性和variables的值作为其值的对象:

 { document: [ {"name" : "SomeName" } ] } 

这是ES6的新function 。 如果要访问文档variables的第一个项目,请不要创build一个新的对象:

 return new Promise(function(resolve, reject) { dbCollection.updateOne({ "name" : filter }, document[0], { // <======== upsert: true }, function(err, result) { if (err) { console.log('error', err) reject(err); } console.log("Found Document and Upserted replacement Document"); resolve([{'status' : 'success'}]); }); });