如何设置bsonDocument的ID?

时间:2019-05-07 15:26:51

标签: c# serialization azure-cosmosdb bson bsondocument

我有一个复杂的类(名为ArticleData)。 现在,当我使用以下代码创建bsonDocument时,生成的bsonDocument自动获取一个文档ID(即使我尝试自己设置“ _id”):

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

我无法以任何方式修改ClassArtData类。 否则,我可以添加一个字段'_id'并将其设置为我的自定义ID。

有人知道我如何将bsonDocument的ID设置为自定义ID?

我编码的目的是将bsonDocument保存到我的cosmosDb中。为了以后能够找到我的文档,我想查询我的自定义ID(唯一商品ID)。

更新:真实示例:

{
    "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 :(得分:0)

问题是我创建了bson文档,并将这些文档插入到波斯菊db中,从而导致观察到的环绕。 正确的方法是将我的对象直接写入cosmos db,但将它们包装在自定义的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数据元素的预期ID:

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

这里是插入元素的代码:

articleCollection.InsertOne(articleData);

这样,我无需修改ArticleData对象定义就可以设置ID。

结果:

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