如何在mongodb中动态$ set一个子文档字段?

AJB

我遇到了需要动态更新子文档中字段值的情况。该字段可能存在或可能不存在。如果它不存在,我希望mongo创建它。

这是在我的Teams收藏夹中找到的示例文档,用于存储任何给定团队的成员:

{
  _id : ObjectId('JKS78678923SDFD678'),
  name : "Bob Lawblaw",
  status : "admin",
  options : {
    one : "One",
    two : "Two"
  }
}

这是我正在使用的查询(我使用mongojs作为我的mongo客户端)来尝试更新(或创建)options子文档中的值

var projectID = 'JKS78678923SDFD678';
var key = 'Three';
var value = 'Three';

Teams.findAndModify({
    query: {
        projectID:mongojs.ObjectId(projectID)
    },
    update: {
        $set : { options[key] : value }
    },
    upsert: true,
    multi: false,
    new: true
},
function(error, result, lastErrorObject){

    console.log(result);

});

但是我无法“提升”价值。

我也找到了类似的问题,但是该方法也不起作用:Nodejs Mongo插入子文档-动态字段名

在此先感谢您的帮助。

AJB

想通了。

本质上,您需要在运行查询之前为要更新的子文档构造一个“占位符”对象,如下所示:

var projectID = 'JKS78678923SDFD678';

var key = 'Three';
var value = 'Three';

var placeholder = {};
placeholder['options.' + key] = value;

Teams.findAndModify({
    query: {
        projectID:mongojs.ObjectId(projectID)
    },
    update: {
        $set : placeholder
    },
    upsert: true,
    multi: false,
    new: true
},
function(error, result, lastErrorObject){

    console.log(result);

});

这将更新任何已经存在的字段,并创建一个不存在的字段/值对。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从 mongodb 中的另一个子字段元素更新子字段元素?

我如何才能从各个级别的子文档中获取一个子文档字段及其所有_id?

如何使用原子查询更新猫鼬中另一个子文档中的一个子文档?

如何在猫鼬中仅获得一个子文档中的一项?

如何在mongodb中的另一个文档中过滤文档的字段?

MongoDB-使用另一个子数组字段更新父数组字段

如何在GSON中将多个字段解析为一个子对象?

mongodb - 查找匹配查询的第一个子文档

Mongoose ADDING/SUMING 子文档数组值位于另一个子文档数组中

如何在 VBA 中将字段的设置变量名称从一个子例程传递到另一个子例程?

匹配,更新并返回数组中的最后一个子文档

MongoDB计算2个子文档中的字段并生成新文档

如何在mongodb中获取子文档中的最后一个元素

在另一个子文档数组中的猫鼬增量子文档数组值

VBA EXCEL:如何在另一个子例程中调用一个子例程?

如何填充作为另一个文档的数组元素的子文档的字段?

我将如何更新MongoDB中一个总计子文档值的字段?

如何在MongoDB中执行动态文档更新?

MongoDB:查询文档,其中一个字段等于其子文档字段之一?

如何在mongodb中搜索字段的特定动态模式。?

如何在另一个LeafSystem中创建一个子LeafSystem?

如何在同一个子文档上使用多个条件查询和过滤 Solr 6.4 子文档?

一个文档字段的总和mongodb

如果一个子集合中只有一个文档,那么给子文档最好的 ID 是什么?

如何将xml节点作为第一个子节点插入Java中的另一个xml文档中?

Mongodb $ project:排除子文档中除一个字段外的所有字段,其余保留

Set Word = GetObject(, "Word.Application") 在一个子文件中有效,但在同一文档的其他子文件中无效

在所有mongodb子文档中切换一个布尔字段

将文档插入具有一个具有动态结构的字段的mongodb中