私は以下のコードで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ドライバでそれを行うには?
私は_id'はDocumentDBでid' 'として認識されていない'、言ったように。 _real id_が自動的に生成されます。 – Youngjae
@ Youngjae、MongoDBのドライバを使って文書を読んでいますか? "Id"はDocumentDBの特別なプロパティであり、常に "_id"の文字列表現に設定されます。 Mongo層は、ユーザー定義の "id"を "$ id"に変換して保存しますが、 "id"に変換してから、結果をMongoDBインターフェイス経由で返します。 –
MongoDBドライバのみを使用するのでAzPortalブラウザからのみデータを読み込みます他のジョブからDocDB .Netドライバを使用して読み込みます。ですから、_real_ DocDB 'id'をMongoDBドライバから手動で設定する方法はありませんか? – Youngjae