将新项目推送到JSON数组中

假设这是我收集的表格:

{ "_id" : ObjectId("557cf6bbd8efe38c627bffdf"), "name" : "John Doe", "rating" : 9, "newF" : [ "milk", "Eggs", "Beans", "Cream" ] } 

一旦用户input了一些内容,它会被发送到我的节点服务器,然后我的节点服务器将这个项目添加到列表"newF" ,然后发送回我的MongoDB并保存。 我试图使用更新,它可以成功地更改此表中的值,但我不知道如何将新项目添加到该列表。 我在MongoDB shell使用了$push ,但不知道如何在节点上执行它。

这是我的代码片段:

 db.collection('connlist').update({ _id: new ObjectId("e57cf6bb28efe38c6a7bf6df")}, { name: "JohnDoe", rating: 9, newF: ["Milk, Eggs", "Beans"] }, function(err,doc){ console.log(doc); }); 

那么添加新项目的语法就和在shell里一样:

 // make sure you actually imported "ObjectID" var ObjectId = require('mongodb').ObjectID; db.collection('conlist').update( { "_id": new ObjectId("e57cf6bb28efe38c6a7bf6df") }, { "$push": { "newF": { "$each": [ "cream", "butter" ] } } }, function(err,numAffected) { // do something in the callback } ) 

或者,如果你想返回修改后的文档,而不是仅仅改变,可以使用.findOneAndUpdate()

当然可以使用$push ,也可以使用$each ,当添加到数组时,可以添加多个数组元素。 如果你想要“唯一”的项目,那么在你的操作允许的地方使用$addToSet

一般来说,对于其他项目,您应该在文档的更新部分使用$set或其他操作符。 如果没有这些操作符,您只需用您在语句“更新”部分放置的任何结构“replace”文档内容即可。