MongoDB:如何在嵌套数组中设置字段值

里斯

我的Mongodb API中有一个对象数组,其中每个公司对象中都包含一些公司数据,还有另一个数组则用于保存帖子。我希望能够通过id找到公司,然后通过id在posts数组内找到一个帖子,并更新column_index值。我可以按ID获取公司,然后按ID获取职位,但随后我需要能够更改该职位的column_index值。

这是我数据库中的集合:

[ 
    { 
        _id: 5e98255f1c9d440000eefaf5,
        company_name: 'Google',
        board_posts: [ 
            {
                _id: 5e98255f1c9d440000ee5555,
                column_index: 0,
            },
            {
                _id: 5e98255f1c9d440000ee9999,
                column_index: 0,
            },
        ] 
    },
    { 
        _id: 5e98255f1c9d440000eefa44,
        company_name: 'Samsung',
        board_posts: [ 
            {
                _id: 5e98255f1c9d440000ee1111,
                column_index: 0,
            },
            {
                _id: 5e98255f1c9d440000ee2222,
                column_index: 0,
            },
        ] 
    },
]

过滤条件:

    const compId = '5e98255f1c9d440000eefaf5';
    const postId = '5e98255f1c9d440000ee9999';
    const newColumn = req.body.newColumn;

    Company.aggregate([
        {
            $match: {
                _id: ObjectId(compId),
            },
        },
        {
            $project: {
                board_posts: {
                    $filter: {
                        input: "$board_posts",
                        as: "post",
                        cond: {
                            $eq: ["$$post._id", ObjectId(postId)],
                        },
                    },
                },
            },
        },
    ])
    .then((result) => {
        console.log(result[0].board_posts);
        res.sendStatus(201);
    })
    .catch((error) => {
        console.log(error);
        res.status(500);
    });
詹姆士

看起来您想基于多个条件进行更新,请尝试以下操作:

Company.update({
        _id:"company id",
        board_posts: { $elemMatch:{
            _id: "post id",
        }}
    },
    {
        "$set" : {"board_posts.$.column_index" : "index"}
    }
);

更新#1:根据您的评论,一次更新多个字段,您指定的方法对于MongoDB驱动程序来说不是可接受的语法。

但是,您可以像这样单独更新它们:

Company.update({
        _id:"company id",
        board_posts: { $elemMatch:{
            _id: "post id",
        }}
    },
    {
        "$set" : {
           "board_posts.$.column_index" : "index", 
           "board_posts.$._id" : "id"
        }
    }
);

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在嵌套数组 PHP 中设置值

如何在mongoDB或Mongoose中更新嵌套数组的值

如何从嵌套数组中获取字段和值并查询它们以在 mongodb 中查找文档?

MongoDB - 如何从嵌套数组中的元素中删除字段?

如何在c#中的mongodb中重命名嵌套数组的文档字段

如何限制在mongodb中返回的嵌套数组字段

在带有mongodb的meteorjs中,如何在嵌套数组中设置var

从非嵌套字段 mongodb 设置嵌套数组字段

如何在嵌套的对象数组中取消设置值?MongoDB

我们如何使用自定义值更新数组字段的值/在 mongodb 的嵌套数组中添加字段

如何在嵌套数组中实现多字段更新

如何在嵌套数组中添加新字段

如何在MongoDB中更新嵌套数组中的数据

如何更新嵌套数组mongodb中的值?

如何更新 mongodb 嵌套数组中的值?

MongoDB:如何在嵌套数组中插入对象?

如何在MongoDB中更新多层嵌套数组?

如何在mongodb中查询对象的嵌套数组?

如何在 MongoDB 中对嵌套数组进行排序?

如何在MongoDB中的$ group内创建嵌套数组?

如何在mongodb中检索嵌套数组的单个元素?

如何在JavaScript中的嵌套数组中查找值

MongoDB:如何在嵌套数组中查找特定值,如果找到,则仅显示该数组而不是全部?

在mongodb中合并父字段及其嵌套数组字段

如何在 MongoDB 中的另一个嵌套数组中更新嵌套数组中的对象

如何更新嵌套数组中的值?

如何更改嵌套数组中的值

如何在mongodb的对象中更新我的另一个嵌套数组的嵌套数组

Mongodb:如何在对象的嵌套数组中转换字段