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

发布于 2024-12-01 18:47:32 字数 505 浏览 1 评论 0原文

{ id = "城堡",
标签 = [“红”、“黑”、“白” ], 数量:3 }

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

我想添加标签并在单个查询中增加标签计数。

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

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

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

我想知道在上述情况下我是否可以在单个查询中完成它。

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

{ id = "castle",
tags = [ "Red", "Black", "White"
],
count:3 }

I have a collection like above, a tags array with a unique item and counter of array.

I would like to add a tags and increment the tags count in a single query.

var query = Query.EQ("id", "castle");
var update = Update.AddToSetWrapped("tags", "White").Inc(count", 1);
Photo.Update(query, update);

What I expected is that the first part of this query is invalid because "White" is already in tags array so $inc will not execute.

But the actual result is tag doesn't insert(correct) and the counter get increment(surprise!).

I would like to know if I can do it in single query in above case.

I am using mongodb offical C# driver.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

哑剧 2024-12-08 18:47:32

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

MongoDB JIRA 系统此处存在一个突出的错误。 此处也存在类似的错误。如果你想解决这个问题,你必须对他们投票。当然,第一个已经开放一年多了,而且还没有预定,所以目前还没有被认为那么重要。

This is actually a limitation of MongoDB. There is no "trigger" or "update x if addToSet works".

There is an outstanding bug in the MongoDB JIRA system here. There's a similar bug here. If you want this fixed you'll have to Vote on them. Of course, that first one has been open for over a year and is not scheduled, so it's not currently deemed that important.

[旋木] 2024-12-08 18:47:32

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

Given MongoDB limitations, you can query records with id="castle" that don't have a "White" tag. Then run the update only if you get any records.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文