将新项目推送到JSON数组中

时间:2015-06-14 04:22:59

标签: json node.js mongodb

让我们说这是我的收藏中的表格:

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

用户输入某些输入后,会将其发送到我的节点服务器,然后我的节点服务器会将该项添加到列表"newF",然后将其发送回我的MongoDB并保存。 我正在尝试使用update,它可以成功更改此表中的值,但我不确定如何将新项添加到该列表中。我在$push内使用MongoDB shell进行了此操作,但不确定如何在节点上执行此操作。

以下是我的代码片段:

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

1 个答案:

答案 0 :(得分:1)

添加新项目的语法与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或其他运算符。如果没有这些操作符,您只需用您在语句的“更新”部分中放置的任何结构“替换”文档内容。