我有以下文件。
{
name: 'XYZ',
SubscriptionPeriods" : [{
"_id" : null,
"PeriodCode" : "1M",
"Fee" : "100"
}, {
"_id" : null,
"PeriodCode" : "3M",
"Fee" : "300"
}]
}
管理员可以更新订阅期;他可以删除现有句点和/或在同一更新中添加新句点。最初我认为我可以通过在一个Update(...)中的SubscriptionPeriods元素上执行PullAll(...)和PushAll(...)来实现这一点。但事实证明,mongodb在Update(...)中不接受两次字段。我可以在2个不同的更新(...)中完成PullAll(...)和PushAll(...)。但我没有采用这种方法,因为如果有人试图在PullAll()和PushAll()之间读取SubscriptionPeriods,他将获得一个空的SubscriptionPeriods,这是不可接受的。 所以我想出了这个;我在一次更新中创建了另一个名为SubscriptionPeriods1的元素,并在另一个更新中将其重命名为SubscriptionPeriod。这看起来很有效。但我想知道我是否在这里俯瞰任何东西!感谢MongoDB大师对我的任何评论!
答案 0 :(得分:0)
是的,这是真的,司机不接受同一领域的两次操作。但是,对于您的案例,有更简单的解决方案。
Update.PullAll("name", ..).PushAll("name", ..)
等于Set("name", bsonArray)
所以你需要简单地设置新数组而不是旧数组。