我正在尝试在 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。
答案 0 :(得分:0)
要更新数组的元素,该数组是Collection项的变量,您可以这样做:
获取数组:
var arr = Events.findOne({_ id:eventId})。确认;
执行您的操作
使用修改过的数组更新旧数组:
Events.update({_ id:eventId},{$ set:{confirms:arr}});
如果第2步出现问题:您可以遍历数组检查是否this.person === personId然后设置this.confirmed = isConfirmed& this.timestamp =新日期。
在Mongo中可能有对阵列进行操作的方法,但这个方法肯定有用。