【问题标题】:Push new items into JSON array将新项目推送到 JSON 数组中
【发布时间】:2015-06-14 13:50:46
【问题描述】:

假设这是我收藏中的表格:

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

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

这是我的代码的 sn-p:

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

【问题讨论】:

标签: json node.js mongodb


【解决方案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 或其他运算符。如果没有这些运算符,您只是用您在语句的“更新”部分中放置的任何结构“替换”文档内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2020-04-22
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多