C#mongodb字段名称复制解决方法

时间:2012-01-22 13:23:48

标签: c# mongodb mongodb-.net-driver

我有以下文件。

{
   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大师对我的任何评论!

1 个答案:

答案 0 :(得分:0)

是的,这是真的,司机不接受同一领域的两次操作。但是,对于您的案例,有更简单的解决方案。

Update.PullAll("name", ..).PushAll("name", ..)等于Set("name", bsonArray)

所以你需要简单地设置新数组而不是旧数组。