javascript 如何使用弹出和推在一个查询与 Mongoose ?

irtuqstp  于 2023-02-28  发布在  Java
关注(0)|答案(2)|浏览(67)

是否可以在一个查询中执行这两个"操作

const deleteUser = await BOQ.findOneAndUpdate({_id:req.params.id}, { $pop: { user: 1 }});
const assignUser = await BOQ.findOneAndUpdate({_id:req.params.id}, {$push:{user: req.params.userId}})

如果可能的话,谁能告诉我怎么做?
我尽力了

const deleteUser = await BOQ.findOneAndUpdate({_id:req.params.id}, { $pop: { user: 1 }},
    {$push: {user: req.params.userId}});

但这行不通

hi3rlvi2

hi3rlvi21#

const deleteUser = await BOQ.findOneAndUpdate(
    { _id: req.params.id },
    {
        $pop: { user: 1 },
        $push: { user: req.params.userId }
    }
);

第二个参数是update操作符的文档,可以参考documentation来获得更多关于参数的细节。

csbfibhn

csbfibhn2#

不能在同一查询中同时使用$push$pop运算符。
但是,您可以使用带有$slice修饰符的$push操作符,这将确保数组中只包含固定数量的项--并且将有效地根据$slice的值从开头或结尾“弹出”项。
例如,下面的代码确保了数组中只保留两个项目。新的项目放在末尾,旧的项目从开头移除。arr是字段名,它必须是一个数组才能正常工作。

{
    $push: {
        arr: {
            $each: [ "new_item_value" ],
            $slice: -2,
    },
}

这在您的用例中可能不起作用,但这似乎是在单个调用中同时执行push和pop的唯一方法。

相关问题