如何向mongoDB文档的现有子对象添加新的key:value对

时间:2018-12-24 20:56:42

标签: javascript node.js mongodb

我正在尝试将一个新的key:value对添加到mongoDB文档的现有对象中,但是没有任何步骤对我有帮助

我尝试了$ each,$ push $ addtoset,但是我理解它们是用于数组的,然后我尝试了$ det,但是它正在用新的key:value对更新现有的key:value对

这是我的文件

    {
    test:"abc",
    test2:"cdf",
    test3:{ 1:"one"}
    }

如果您在上述文档中的观察者test3键我已经具有1:“一个”,那么我想在同一对象中添加新键值

喜欢

    {
    test:"abc",
    test2:"cdf",
    test3:{ 1:"one", 2:"two", 3:"three"}
    }

在mongoDB中可以吗?

这是mongo查询

            let val = parseInt(DYNAMICVALUE)
              var changfeemaildot = (req.session.email).replace(/\./g, '#')
              var seld = {
                _id: ObjectId(rx[0]._id)
              };
              var seldu = {

                $set:{
                emails: {
                   [changfeemaildot]: val
                }
              }
            };

              var collection = 
              connection.get().collection('problems');
              collection.update(seld, seldu, function (err, rail) {
              });

2 个答案:

答案 0 :(得分:0)

您可以使用$set。因此您的代码可以是这样的

db.collection.update({<your_condition>}, {$set: {"test3.2": "two", "test3.3": "three"}});

在您的情况下,将是这样

var seldu = {$set: {["emails." + changfeemaildot]: val}}

答案 1 :(得分:0)

您可以将 $set 与 findOneAndUpdate 一起使用。所以你的代码可以是这样的

  const { Types, connection } = require("mongoose");

  const productList = await connection.collection('products').find({}).toArray()
    productList.forEach(async function(myDoc) {
        await connection.collection('products').
        updateOne({ productId: Types.ObjectId(myDoc.productId) }, {
            $set: {
                productDisplayId: 'anything you want'
            }
        });
    });