我在Mongo中有一个看起来像这样的对象:
{
"_id" : ObjectId("59bffce310b7213b6c812f53"),
"Key" : 1.0,
"LatestCardId" : 1.0
}
我试图保留我在整个系统中使用的ID。我希望它是独一无二的,所以我有一个只为这个id的集合。我只会有一个实例跟踪id。我想用它在另一个集合中创建一个条目。然后该对象将返回给用户,以便他们可以使用我的新ID来访问主要集合。
我的问题在于C#驱动程序(v2.4.4)中的Update.Inc语句。我已经把所有东西都删掉了,阅读了文档,我正在努力理解我得到的例外。
数据库连接正常,这是我的代码:
var idCollection = database.GetCollection<BsonDocument>(collectionName);
var filter = Builders<BsonDocument>.Filter.Eq("Key", 1);
var update = Builders<BsonDocument>.Update.Inc("LatestCardId", filter);
var result = await idCollection.UpdateOneAsync(filter, update);
然后我得到了这个例外:
{"A write operation resulted in an error.\r\n Cannot increment with non-numeric argument: {LatestCardId: { _t: \"SimpleFilterDefinition
2 \&#34; }}&#34;}`
有谁知道我做错了什么。已经很晚了,所以我可能已经非常愚蠢了。任何帮助表示赞赏。
顺便说一下,有没有人知道我是如何使用Mongo的强类型C#版本来做到这一点的,例如:
var idCollection = database.GetCollection<CardIdObj>(collectionName);
答案 0 :(得分:0)
我相信这可能是您正在寻找的,包括您的强类型收藏。
var idCollection = database.GetCollection<CardIdObj>("CardIdObj");
var filter = Builders<CardIdObj>.Filter.Eq(x => x.Key, 1);
var update = Builders<CardIdObj>.Update.Inc(x => x.LatestCardId, 1);
var result = idCollection.UpdateOne(filter, update);
您似乎正在尝试使用过滤器增加LatestCardId,但这不起作用。
或者如果你想继续使用魔法字符串:
var idCollection = database.GetCollection<BsonDocument>("CardIdObj");
var filter = Builders<BsonDocument>.Filter.Eq("Key", 1);
var update = Builders<BsonDocument>.Update.Inc("LatestCardId", 1);
var result = idCollection.UpdateOne(filter, update);