【问题标题】:Push & Pull objects out of array从数组中推拉对象
【发布时间】:2020-11-21 10:25:13
【问题描述】:

我有 2 种类型的集合,但我无法让它在其中任何一种上工作,它们是相似的:

科尔-A:

{
    "_id": {...},
    "something that doesnt matter": {...},
    "var1": {
        "var2": [{...}, {...}, {...}, {...}, {...}],
        "var3": [{...}, {...}, {...}, {...}, {...}]
    },
    "something that doesnt matter": {...}
}

我正在尝试将对象推入和拉出 var2 数组, 我尝试了多种方法,例如:

await db.collection("coll").findOneAndUpdate(
    { var1: { $exists: true } },
    { $push: { var1: { var2: object} } }
);

但是它说 var1 不是一个数组,当我用 pull 尝试它时,它清空了我的整个集合 xD 对于拉动,我知道必须删除的每个对象都有一个唯一的 ID。

科尔-B:

[
    {
        "_id": {...},
        "uniqueId": "01",
        "settings": {
            "var1": {
                "var2": [{...}, {...}, {...}, {...}, {...}],
                "var3": {...}
            },
            "var3": [{...}, {...}, {...}, {...}, {...}]
        },
        "something that doesnt matter": {...}
    },
    {
        "_id": {...},
        "uniqueId": "02",
        "settings": {
            "var1": {
                "var2": [{...}, {...}, {...}, {...}, {...}],
                "var3": {...}
            },
            "var3": [{...}, {...}, {...}, {...}, {...}]
        },
        "something that doesnt matter": {...}
    }
]

Coll-B 有点不同,它一开始有多个对象,它们都有一个唯一的 ID,但在我们需要 Push 和 Pull 的 var2 数组中,所有对象也有唯一的 ID。

如果有人对我们如何完成这项工作有任何想法,请告诉我们!因为现在我们正在 $set 重新对整个数组进行处理,当多个同时运行时只有最后一个更新,所以我真的需要使用推拉。

【问题讨论】:

  • 尝试使用点 (.) 表示法以到达要推/拉的数组字段示例:{ $push: { "var1.var2": { object } } }{ $pull: { "var1.var2": { object } } }

标签: arrays mongodb typescript


【解决方案1】:

尝试使用点 (.) 表示法以到达您要推/拉的数组字段 示例:{ $push: { "var1.var2": { object } } } OR { $pull: { “var1.var2”:{对象}}}。 – @ambianBeing

是的,谢谢你帮助我现在使用:

更新:

let index = `settings.var1.var2.${id}`;

coll.findOneAndUpdate(
    { uniqueId: uId },
    { $set: { [index]: follows[id] } }
);

用于推送:

coll.findOneAndUpdate(
    { uniqueId: uId },
    {
        $push: {
            "settings.var1.var2": newObject
        }
    }
);

用于拉动:

let index = `settings.var1.var2.${id}`;

await coll.findOneAndUpdate(
    { uniqueId: uId },
    { $unset: { [index]: 1 } }
);

await coll.findOneAndUpdate(
    { uniqueId: uId },
    {
        $pull: {
            "settings.var1.var2": null
        }
    }
);

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2021-11-06
    • 2017-08-08
    • 2023-03-29
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2017-12-05
    相关资源
    最近更新 更多