猫鼬-更新数组内的对象

时间:2019-06-15 01:19:41

标签: node.js mongodb mongoose

我有一个看起来像这样的架构:

(from e in db.Employees
 join t in db.Tools.GroupBy(tool => tool.EmployeeId) on e.EmployeeId equals t.Key into empTool
 from et in empTool.DefaultIfEmpty()
 select new Employee()
 {
    EmployeeId = e.EmployeeId,
    Tools = et != null ? et.Where(t => !t.IsBroken).ToList() : null
 }).ToList();

我正在使用其const RefSchema = { active: Boolean, items: [{}], }; const TopLevelSchema = new mongoose.Schema({ refs: [RefSchema], ... }, { timestamps: true }); (位于其refs下)和API调用内的一些数据进行API调用,以更新id之一:

rid

正在发生的事情是数据(例如,我正在传递async function updateRef(id, rid, data) { // First get the TopLevelSchema by the ID - this is OK const instance = await this.findById(id).exec(); // Prepare the data: const $set = _.mapKeys(data, (v, k) => `refs.$.${k}`); // Update the data await instance.update( { 'refs.id': rid }, { $set }, ); )没有更新。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

无需先获取TopLevelSchema等。您可以像这样更新子级:

async function updateRef(rid, data) {
   let $set = _.mapKeys(data, (v, k) => `refs.$.${k}`)
   await TopLevelSchema.updateOne(
     { 'refs._id' : mongoose.Types.ObjectId(rid) },
     { $set })
}

答案 1 :(得分:0)

您是否使用自定义ID?因为您应该使用{ '_id': rid }而不是{ 'refs.id': rid }