Node.js 在同一个findByIdAndUpdate上,使用$push和$pull

Node.js 在同一个findByIdAndUpdate上,使用$push和$pull,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,在下面的代码中,我试图findbyidanddupdate,对于更新,我想添加到objectid的两个数组中,并从另一个数组中提取。但是,仅执行更新的第一个命令。因此,$push:{Group1:groupId,Group2:groupId}正在执行,但$pull:{Group3:groupId}没有执行 有没有办法让这两个操作一起工作? 代码 User.findByIdAndUpdate( userId, { $push: {Group1: groupId,

在下面的代码中,我试图
findbyidanddupdate
,对于更新,我想添加到
objectid的两个数组中,并从另一个数组中提取。但是,仅执行更新的第一个命令。因此,
$push:{Group1:groupId,Group2:groupId}
正在执行,但
$pull:{Group3:groupId}
没有执行

有没有办法让这两个操作一起工作?

代码

User.findByIdAndUpdate(
    userId,
    {

        $push: {Group1: groupId, Group2: groupId},
        $pull: {Group3: groupId},
    },
    {'new': true, 'multi':true},
    function (err, user) {

        if (err)
            console.log(err);
        else {
            res.json({
                success: true,
                message: 'Success.'
            });
        }

    }
);
模式

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');

var ObjectId = Schema.Types.ObjectId;

//user schema
var UserSchema = new Schema({
   username: {type: String, required: true, index:{unique:true}},
   phoneNumber: {type: String, required: true, index:{unique:true}},
   password: {type: String, required: true, select: false},
   name: String,
   Group1: [{ type : ObjectId, ref: 'Group' }],
   Group2: [{ type : ObjectId, ref: 'Group' }],
   Group3: [{ type : ObjectId, ref: 'Group' }],
});
module.exports = mongoose.model('User', UserSchema);
下面是用户对象上的json表示

{
"_id": ObjectId('564a4a24f63d409f526659c4'),
"password": "$2a$10$YYEdr4kavrB2w8dRWHqWC.hAUd1pRzKM6YQt9iLtkrLDk0cRg24Wa",
"phoneNumber": "222",
"username": "222",
"Group1": [
    ObjectId('564a2ac4e982c8bb5122a96e')
],
"Group2": [],
"Group3": [],
"__v": 0
}
当我执行代码时,json对象看起来像

    {
"_id": ObjectId('564a4a24f63d409f526659c4'),
"password": "$2a$10$YYEdr4kavrB2w8dRWHqWC.hAUd1pRzKM6YQt9iLtkrLDk0cRg24Wa",
"phoneNumber": "222",
"username": "222",
"Group1": [
    ObjectId('564a2ac4e982c8bb5122a96e')
],
"Group2": [
    ObjectId('564a2acae982c8bb5122a970')
],
"Group3": [
    ObjectId('564a2acae982c8bb5122a970')
],
"__v": 0
}
因此,没有删除组3中的objectID。 我当时的想法是,当同时执行拉和推操作时,我没有正确使用FindByid和Update。
这使我倾向于只使用findById,然后在回调中进行更新。与使用findByIdAndUpdate相比,这样做会有缺点吗

这应该行得通。您可以编辑您的问题以显示您的架构和正在更新的文档吗?谢谢您的回答,我为正在更新的对象添加了架构。谢谢,您还可以添加正在更新的文档和
groupId
的值吗?正在更新的文档是用户架构,我不知道组Id,它应该是任何数字。不,我指的是您正在更新的特定文档的JSON表示,而这不起作用。