2017-05-05 8 views
1

私は以下のコードでjsonドキュメントをアップしたいと思います。Azure DocumentDB with MongoDB .NETドライバ:idを手動で設定するには?

string CollectionName = "Collection"; 

MongoClientSettings settings = MongoClientSettings.FromUrl(
    new MongoUrl(MongoDbConnectionString) 
); 
settings.SslSettings = 
    new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12 }; 
var mongoClient = new MongoClient(settings); 
var db = mongoClient.GetDatabase(MongoDbDatabaseName); 

var collection = db.GetCollection<BsonDocument>(CollectionName); 

// id that I want to set. 
var id = Guid.NewGuid().ToString(); 
var _id = Guid.NewGuid().ToString(); 

JObject jObject = new JObject(
    new JProperty("id", id), // Id test 1 
    new JProperty("_id", _id), // Id test 2 
    new JProperty("property1", "value1"), 
    new JProperty("property2", "value2")); 

BsonDocument newDoc = BsonDocument.Parse(jObject.ToString()); 

// upsert reference: http://stackoverflow.com/q/7240028/361100 
var result = collection.ReplaceOne(
    filter: new BsonDocument("id", jObject["id"].Value<string>()), 
    options: new UpdateOptions { IsUpsert = true }, 
    replacement: newDoc); 

idは私が手動で設定する値であるが、結果は以下の通りです。

{ 
    "$id": "0106669b-9670-4547-a2a3-f7ea800fac0d", // Id test 1 
    "_id": "9eb71b3e-83be-4dd9-b037-269d59cbe5e4", // Id test 2 
    "id": "9a0a4b90-5be7-44b7-af05-e3bbe08dc25e", // system generated 
    "property1": "value1", 
    "property2": "value2", 
    "_rid": "I2ECAKbBewAEAAAAAAAAAA==", 
    "_self": "dbs/I2ECAA==/colls/I2ECAKbBewA=/docs/I2ECAKbBewAEAAAAAAAAAA==/", 
    "_etag": "\"0000d277-0000-0000-0000-590c557a0000\"", 
    "_attachments": "attachments/", 
    "_ts": 1493980531 
} 

マイid値Iが期待されていない、ドキュメント内のプロパティidがシステムによって生成さ$idプロパティに配置されています。

NOTE 私はid_idの両方をテストしたが、それらのすべてがDocumentDB "id"として設定されていません。

DocumentDB .NETライブラリでは、プロパティ名がidの場合にのみ、idを自分で設定することができます。どのようにMongoDB .NETドライバでそれを行うには?

答えて

1

MongoDBでは、ドキュメントのIDは "id"ではなく "_id"です。予想される動作を得るには、名前== "_id"の新しいJPropertyを追加する必要があります。

JObject jObject = new JObject(
    new JProperty("_id", id), 
    new JProperty("id", id), 
    new JProperty("property1", "value1"), 
    new JProperty("property2", "value2")); 

https://docs.mongodb.com/manual/reference/method/db.collection.insert/#insert-a-document-specifying-an-id-field

+0

私は_id'はDocumentDBでid' 'として認識されていない'、言ったように。 _real id_が自動的に生成されます。 – Youngjae

+0

@ Youngjae、MongoDBのドライバを使って文書を読んでいますか? "Id"はDocumentDBの特別なプロパティであり、常に "_id"の文字列表現に設定されます。 Mongo層は、ユーザー定義の "id"を "$ id"に変換して保存しますが、 "id"に変換してから、結果をMongoDBインターフェイス経由で返します。 –

+0

MongoDBドライバのみを使用するのでAzPortalブラウザからのみデータを読み込みます他のジョブからDocDB .Netドライバを使用して読み込みます。ですから、_real_ DocDB 'id'をMongoDBドライバから手動で設定する方法はありませんか? – Youngjae

関連する問題