1

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

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

我无法以任何方式修改 ArticleData 类。否则,我可以添加一个字段“_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"
    }
4

1 回答 1

0

问题是我创建了 bson 文档并将它们插入到 cosmos 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,
        ...
    }
}
于 2019-05-10T09:00:03.820 回答