1
我想要插入json文件,如下面的代碼;帶有MongoDB .NET驅動程序的Azure DocumentDB:如何手動設置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
值被放置在$id
屬性沒有我預期其中,生成在文件屬性id
由系統。
注意 我測試了id
和_id
,但所有的人都沒有設置爲DocumentDB "id"
。
DocumentDB .NET庫允許我自己設置id
如果我只將屬性名稱id
。如何用MongoDB .NET驅動程序做到這一點?
正如我說,'_id'不承認'在DocumentDB id'。 _real id_自動生成。 – Youngjae
@Youngjae,你是否使用MongoDB驅動來讀取文檔? 「Id」是DocumentDB中的一個特殊屬性,並且始終設置爲「_id」的字符串表示形式。 Mongo層在存儲時將用戶指定的「id」轉換爲「$ id」,但在通過MongoDB接口返回結果之前將其轉換爲「id」 –
我僅從AzPortal瀏覽器讀取數據,因爲我將只使用MongoDB驅動程序寫作的目的,並將從其他工作使用DocDB .Net驅動程序讀取。那麼,是否沒有辦法從MongoDB驅動程序手動設置_real_ DocDB'id? – Youngjae