Как установить идентификатор bsonDocument? - PullRequest
1 голос
/ 07 мая 2019

Я получил сложный класс (названный ArticleData). Теперь, когда я создаю bsonDocument, используя следующий код, результирующий bsonDocument автоматически получает идентификатор документа (даже если я сам пытаюсь установить «_id»):

// bson document created from ArticleData object
var doc = articleData.ToBsonDocument();
doc["_id"] = "12345678";
articleCollection.InsertOne(doc);

Я не могу каким-либо образом изменить класс ArticleData. В противном случае я мог бы добавить поле '_id' и установить его в свой пользовательский идентификатор.

Кто-нибудь знает, как я могу установить идентификатор bsonDocument для пользовательского идентификатора?

Цель моего кодирования - сохранить этот bsonDocument в моем cosmosDb. Чтобы потом найти мои документы, я бы хотел запросить мой пользовательский идентификатор (уникальный идентификатор статьи).

Обновление : Пример из реальной жизни:

{
    "ArticleID" : 9993,
    "ArticleRevisionID" : 9993,
    "StructureID" : 10000,
    "StructureGroupID" : 10578,
    "StructureGroupRevisionID" : 10578,
    "ParentIdentifier" : "PS_1294.2",
    "ModelIdentifier" : "PS_1294.2",
    "ModelNrCatalog" : "1294.2",
    "MaterialNumber" : "624341"
}

результирующий документ bson:

{
    "_id" : ObjectId("5cd28ea84085af2d6c8318d2"),
    "_t" : "MongoDB.Bson.BsonDocument, MongoDB.Bson",
    "_v" : {
        "_id" : "12345678"
        "ArticleID" : 9993,
        "ArticleRevisionID" : 9993,
        "StructureID" : 10000,
        "StructureGroupID" : 10578,
        "StructureGroupRevisionID" : 10578,
        "ParentIdentifier" : "PS_1294.2",
        "ModelIdentifier" : "PS_1294.2",
        "ModelNrCatalog" : "1294.2",
        "MaterialNumber" : "624341"
    }

1 Ответ

0 голосов
/ 10 мая 2019

Проблема была в том, что я создал документы bson и вставил их в базу данных космоса, что привело к наблюдаемой упаковке.Правильный способ сделать это - записать мой объект непосредственно в базу данных cosmos, но обернуть их внутри пользовательского объекта CosmosDBData, как это было ранее:

[BsonIgnoreExtraElements]
public class CosmosDbData
{
    [BsonId]
    public string Identifier { get; set; }
    public DateTime LastUpdateUtc { get; set; }
    public object Data { get; set; }
}

Я создал новый объект CosmosDbData (myNewCosmosDbData) и вставил свойarticleData как данные в объект.Затем я смог установить идентификатор в качестве предполагаемого идентификатора для элемента данных cosmosDb:

myNewCosmosDbData.Data = articleData; 
myNewCosmosDbData.Identifier = articleData.ArticleID;

Вот код для вставки элементов:

articleCollection.InsertOne(articleData);

Таким образом, я смог установитьидентификатор без изменения определения объекта ArticleData.

Результат:

{
    "_id" : "115623",
    "_t" : "CosmosDbData",
    "LastUpdateUtc" : {
        "$date" : -62135596800000
    },
    "Data" : {
        "_t" : "ArticleData",
        "ArticleID" : 115623,
        ...
    }
}
...