Mongodb确保单个查询中数组和计数的正确性

时间:2011-08-26 20:04:18

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

  

{id =“castle”,
  tags = [“红色”,“黑色”,“白色”            ]   数:3}

我有一个像上面这样的集合,一个带有唯一项目和数组计数器的标签数组。

我想在一个查询中添加标签并增加标签数量。

  

var query = Query.EQ(“id”,“castle”);
  var update = Update.AddToSetWrapped(“tags”,“White”)。Inc(count“,1);   Photo.Update(查询,更新);

我的期望是这个查询的第一部分是无效的,因为“White”已经在tags数组中,因此$ inc将不会执行。

但实际结果是标签没有插入(正确)而计数器增加(惊喜!)。

我想知道在上述情况下我是否可以在单个查询中执行此操作。

我正在使用mongodb官方C#驱动程序。

2 个答案:

答案 0 :(得分:1)

这实际上是MongoDB的限制。如果addToSet有效,则没有“触发器”或“更新x”。

MongoDB JIRA系统中存在一个突出的错误here。有一个类似的错误here。如果你想要这个修复,你将不得不投票。当然,第一个已经开放超过一年并且没有安排,所以它目前不被认为是重要的。

答案 1 :(得分:0)

鉴于MongoDB的限制,您可以查询id =“castle”但没有“White”标记的记录。然后,只有在获得任何记录时才运行更新。