批量更新猫鼬对象中的数组

Posted

技术标签:

【中文标题】批量更新猫鼬对象中的数组【英文标题】:Batch Update an array in mongoose object 【发布时间】:2015-01-13 04:59:47 【问题描述】:

我的架构如下。学生可以参加任何没有。事件数。每个事件可以有任意数量的学生。

Student
name:String,
age:Number,
.
.
.,
events:
 type:
  [
   type:Schema.ObjectId,
    ref:'Event'
  ]



Event
title:String,
desc:String,
eventDate:Date,
participants:
type:
      [
      student: type:Schema.ObjectId,
               ref:'Student',
      status : String
      ]



我的要求: 每次,我创建一个事件,我都需要将该事件的所有参与者推送到事件对象中。反过来,标记所有参与者内部的事件引用。

我的代码是

function handleTeamParticipants(eventObj, participants) 
    Student
        .find(
            $or: [
                _id: participants[0].student._id
            , 
                _id: participants[1].student._id
            ]
        )
        .populate('events events.participants events.participants.student')
        .exec(function(err, students) 

        var studentLength = students.length,
            result = [];
        var saveAll = function() 
            var doc = students.pop();
            Student.populate(doc, 
                path: 'events.participants.student',
                model: 'Student'
            , function(err, student) 
                student.events.push(eventObj);
                student.save(function(err, saved) 
                    if (err) next(err); //handle error
                    result.push(saved);
                    if (--studentLength) saveAll();
                    else // all saved here
                    

                        return res.status(200).send(eventObj);
                    
                );
            );
        ;
        saveAll();
    );

此代码正在运行。 因此,通过这种方式,我只更新了前两个参与者并依次添加到 eventobj。但我希望查找查询选择所有参与者.student._id

请告诉我简单的方法。

谢谢。

【问题讨论】:

【参考方案1】:

我使用了lodash方法pluck。

lodash.pluck(,);

将给出arrayObj中的属性值列表。

studentList = lodash.pluck(参与者,"学生"); studentIdList = lodash.pluck(studentList,"_id");

【讨论】:

以上是关于批量更新猫鼬对象中的数组的主要内容,如果未能解决你的问题,请参考以下文章

批量更新后更新托管对象上下文中的托管对象

如何使用猫鼬更新数组中的现有对象

嵌入式数组中的猫鼬更新对象

如何使用 Java 对 MongoDB 中的文档进行批量更新?

最详细的MyBatis批量添加更新删除实战篇(日常开发)

有没有办法使用嵌套创建批量更新棱镜中的对象