2017-05-05 88 views
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驅動程序做到這一點?

回答

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」,但在通過MongoDB接口返回結果之前將其轉換爲「id」 –

+0

我僅從AzPortal瀏覽器讀取數據,因爲我將只使用MongoDB驅動程序寫作的目的,並將從其他工作使用DocDB .Net驅動程序讀取。那麼,是否沒有辦法從MongoDB驅動程序手動設置_real_ DocDB'id? – Youngjae

相關問題