0

我在测试我的应用程序时遇到了奇怪的行为。我有一个更新多个文档的请求,并将其中一个字段增加 1(并将其他字段减少 -1,但不要认为这是重点)。

Query = { "_id" : { "$in" : [ObjectId("4fbf8481a975b5237c56f221"),
                             ObjectId("4fbf8481a975b5237c56f222"),
                             ObjectId("4fbf8481a975b5237c56f223")] } };
Update = { "$inc" : { "PartlyCompleted" : -1, "Completed" : 1 } }

第一个文档更新正常,但其他两个不受影响。

可能是什么原因。请给我建议在哪里看。

一些额外的信息。我正在使用 C# 官方驱动程序。这是一些代码:

_personsId = new BsonArray();
_personsId.AddRange(personsId.Where(x => DataService.IsIdValid(x)).
                              Select(x => new ObjectId(x)).ToArray());

var query = Query.In("_id", _personsId);
var update = Update.Combine(
                    Update.Inc("Completed", 1 ),
                    Update.Inc("PartlyCompleted", -1));

DataService.PersonSet.Collection.Update(query, update);

我还检查了下面查询返回的文档数,它是 3:

    var count = DataService.PersonSet.Collection.Count(query);
4

1 回答 1

3

默认情况下,更新只影响第一个匹配的文档。

因此,在您的示例中,mongo 选择这 3 个文档之一并递增计数器。要更新多个文档,您需要设置UpdateFlags.Multi标志。

我很好奇,您是否在其他更新中使用此标志?如果是,为什么要问这个问题?如果不是,您确定这些更新会同时涉及多个文档吗?

于 2012-05-25T13:39:30.107 回答