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'}]); }); });