创建和更新字段Mongoose NodeJs

时间:2018-01-04 23:39:39

标签: node.js mongodb

{
        "_id": {
            "$oid": "5a4e5b1d09fb590058bfdf86"
        },
        "name": "ProjectStore",
        "imageURL": "none",
        "longitude": 0,
        "latitude": 0,
        "rating": 5,
        "leads": [
            {
                "customerId": "5a0c57db65a4931768716566",
                "customerName": "testuser",
                "interested": "testuser",
                "_id": {
                    "$oid": "5a4e5b5409fb590058bfdf88"
                }
            }
        ],
        "items": [
            {
                "name": "chat",
                "categoryID": "5a0c2d292235680012bd12c9",
                "semiCatID": "5a0c2d5f2235680012bd12cb",
                "_id": {
                    "$oid": "5a4e5b3009fb590058bfdf87"
                }
            }
        ],
        "__v": 2
    }

我添加了我的数据库日志,我尝试编写查询,让我更新/推送信息到" LeadStatus"。

这个变量应该在" lead"中的每个对象内。阵列。

我有主要ID" 5a4e5b1d09fb590058bfdf86" 我有特定领导的第二把钥匙" 5a4e5b5409fb590058bfdf88"

我只是不知道如何编写查询,现在我得到了这个....并且得到了错误。

Store.update(
      { _id: req.body.store._id, 'leads._id': 'req.body.lead._id', },
      { $set: { 'leads.$.LeadStatus': 'open' }, },
      (err, result) => {
        if (err) {
          res.status(500)
          .json({ error: 'Unable to update leads.', });
        } else {
          res.status(200)
          .json(result);
        }
      }
    );

请帮助, 感谢。

1 个答案:

答案 0 :(得分:0)

我假设您希望返回更新的文档(您也可以选择不这样做,将选项new切换为false)。您必须为对象分配您正在更新的值,并提供您正在更新的子字段中的所有字段,否则它将删除其他所有字段。这就是为什么你必须先做一个findOne:

return Store.findOne({ '_id': "5a4e5b1d09fb590058bfdf86" })
.then((store) => {
    if (!store) { // patient was not found for some reason
        throw new Error(`Store id was not found`);
    }
    const options = {
        new: true,
    };
    const updatedStore = Object.assign({}, store.toObject(), {
        leads: [
            {
                "leadStatus": "open",
                "customerId": "5a0c57db65a4931768716566",
                "customerName": "testuser",
                "interested": "testuser",
                "_id": {
                    "$oid": "5a4e5b5409fb590058bfdf88"
                }
            }
        ],
    });
    return Store.findOneAndUpdate(
        { '_id': req.body.store._id },
        { $set: updatedStore },
        options);
});

如果您感到好奇,可以使用findOneAndUpdate构建预先/虚拟挂钩(没有相关文档),不会因为不使用更新而丢失任何内容。