MongoDB如何在查询中引用对象的属性

时间:2017-01-28 21:02:05

标签: javascript node.js mongodb

我正在尝试在我的MongoDB上运行一个脚本,该脚本将设置teacher_ids[] = [document.owner_id]owner_id已存在于集合中的所有对象上。我目前的尝试看起来像这样:

db.getCollection('readings').update({ $where: "this.teacher_ids[0] != this.owner_id" }, { $set: { "teacher_ids": [this.owner_id] }}, { multi: true })

所有几乎都有效,但文档看起来像

doc: {
    owner_id: "some_id",
    teacher_ids: [undefined]
}

这必须意味着this的第二个参数中的update没有引用该文档。如何设置:

teacher_ids = [document.owner_id]

示例文档

{
    "_id" : ObjectId("586f07bd6a2169fdffb0563b"),
    "teacher_ids" : [],
    "owner_id" : "57c268dd6c9fd2320035e67e",
    "source" : "http://www.omfgdogs.com",
    "title" : "Test",
    "updatedAt" : ISODate("2017-01-28T07:43:46.597Z"),
    "createdAt" : ISODate("2017-01-06T02:58:05.699Z")
}

1 个答案:

答案 0 :(得分:1)

我认为在更新组件中你不能通过这个或其他方式引用任何其他字段值。

虽然可以通过脚本完成

db.getCollection('readings').find({ $where: "this.teacher_ids[0] != this.owner_id" }).forEach(function(x){x.teacher_ids = [x.owner_id]; db.readings.save(x)});