2017-09-18 4 views
0

Ich habe ein Objekt in Mongo, der wie folgt aussieht:Atomic integer Zahl in MongoDB mit dem C# Treiber

{ 
    "_id" : ObjectId("59bffce310b7213b6c812f53"), 
    "Key" : 1.0, 
    "LatestCardId" : 1.0 
} 

Ich versuche, eine ID ich über das System verwenden zu bewahren. Ich möchte, dass es einzigartig ist, also habe ich eine Sammlung nur für diese ID. Ich werde nur eine Instanz haben, die die ID verfolgt. Ich möchte es dann verwenden, um einen Eintrag in einer anderen Sammlung zu erstellen. Dieses Objekt wird dann an den Benutzer zurückgegeben, damit sie meine neue ID für den Zugriff auf die Hauptsammlung verwenden können.

Mein Problem ist mit der Update.Inc-Anweisung im C# -Treiber (v2.4.4). Ich habe alles zurückgenommen, die Dokumente gelesen und kämpfe darum, eine Ausnahme zu verstehen, die ich bekomme.

Die Datenbank fein verbindet und hier ist mein Code:

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); 

ich diese Ausnahme dann bekommen:

{"A write operation resulted in an error.\r\n Cannot increment with non-numeric argument: {LatestCardId: { _t: \"SimpleFilterDefinition 2 \ "}}"} `

Weiß jemand, was ich m falsch machen. Es ist spät, also war ich wahrscheinlich ziemlich dumm. Jede Hilfe wird geschätzt.

Nebenbei weiß jemand, wie ich dies mit der stark typisierten C# Version von Mongo, z.

var idCollection = database.GetCollection<CardIdObj>(collectionName); 

Antwort

0

Ich glaube, dass dies das sein kann, was Sie suchen, einschließlich Ihrer stark typisierten Sammlung.

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); 

Es scheint, dass Sie Ihre LatestCardId mit Ihren Filter zu erhöhen versuchen, die zur Arbeit gehen nicht.

Oder, wenn Sie Ihren magischen String zu halten mit:

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);