我有一个复杂的类(名为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"
}
答案 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,
...
}
}