MongoDB查询更新嵌套数组

时间:2015-07-25 18:00:39

标签: mongodb

我正在尝试在 mongoDB 中使用一些嵌套数组,但经过几个小时与mongo docs和其他几个SO问题的斗争。我想我可能会做一些非常错误的事情。下面的代码应该更新confirms数组中的confirms数组,但除了添加新条目之外它不会做任何事情。任何帮助将不胜感激。

Events.update({_id: eventId, "confirms.person": personId}, {
    $set: {
        "confirms.$.person": personId,
        "confirms.$.confirmed": isConfirmed,
        "confirms.$.timestamp": new Date()
    }
});

以下是我正在尝试操作的数据示例,它目前是错误的,因为personId应该是唯一的。

{
    "_id": "RnE4PaPSZ9FC9MAAQ",
    "eventTitle": "Epic lan PARTY!!!!!",
    "eventDate": "31/07/2015",
    "confirms": [{
        "person": "jjoqekYYaA6n8nYvs",
        "confirmed": true,
        "timestamp": ISODate("2015-07-25T17:15:28.212Z")
    }, {
        "person": "jjoqekYYaA6n8nYvs",
        "confirmed": true,
        "timestamp": ISODate("2015-07-25T17:16:50.485Z")
    }
    }]
}

为了防止它变得相关,我正在使用流星js。

1 个答案:

答案 0 :(得分:0)

要更新数组的元素,该数组是Collection项的变量,您可以这样做:

  1. 获取数组:

    var arr = Events.findOne({_ id:eventId})。确认;

  2. 执行您的操作

  3. 使用修改过的数组更新旧数组:

    Events.update({_ id:eventId},{$ set:{confirms:arr}});

  4. 如果第2步出现问题:您可以遍历数组检查是否this.person === personId然后设置this.confirmed = isConfirmed& this.timestamp =新日期。

    在Mongo中可能有对阵列进行操作的方法,但这个方法肯定有用。