C# 如何设置bsonDocument的id?
我得到了一个复杂的类(名为ArticleData)。 现在,当我使用以下代码创建bsonDocument时,生成的bsonDocument会自动获得一个文档id(即使我自己尝试设置“_id”): 我无法以任何方式修改类ArticleData。 否则,我可以添加一个字段“\u id”,并将其设置为我的自定义id 有人知道如何将bsonDocument的id设置为自定义id吗? 我编码的目的是将该b文档保存到我的cosmosDb。为了以后能够找到我的文档,我想查询我的自定义id(唯一的文章id) 更新:现实生活示例:C# 如何设置bsonDocument的id?,c#,serialization,azure-cosmosdb,bson,bsondocument,C#,Serialization,Azure Cosmosdb,Bson,Bsondocument,我得到了一个复杂的类(名为ArticleData)。 现在,当我使用以下代码创建bsonDocument时,生成的bsonDocument会自动获得一个文档id(即使我自己尝试设置“_id”): 我无法以任何方式修改类ArticleData。 否则,我可以添加一个字段“\u id”,并将其设置为我的自定义id 有人知道如何将bsonDocument的id设置为自定义id吗? 我编码的目的是将该b文档保存到我的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"
}
问题是我创建了bson文档,并将它们插入cosmos数据库中,这导致了观察到的包装。 正确的方法是直接将我的对象写入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,
...
}
}
问题是我创建了bson文档,并将它们插入cosmos数据库中,这导致了观察到的包装。 正确的方法是直接将我的对象写入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,
...
}
}
“生成的bsonDocument自动获取文档id”-是吗?是的,但我希望能够自己设置它(能够使用查询找到它)。这有可能吗?我是说我从来没见过。能否显示一个包含ArticleData的定义和初始化,以及生成的BsonObject的字符串表示形式?最终,您应该能够自己分配
articleData[“\u id”]
。请参阅我更新的问题,您的B文档似乎由于某种原因被包装。请提及所有相关代码。您正在使用MongoDB驱动程序?“生成的bsonDocument自动获取文档id”-是吗?是的,但我希望能够自己设置它(能够使用查询找到它)。这有可能吗?我是说我从来没见过。能否显示一个包含ArticleData的定义和初始化,以及生成的BsonObject的字符串表示形式?最终,您应该能够自己分配articleData[“\u id”]
。请参阅我更新的问题,您的B文档似乎由于某种原因被包装。请提及所有相关代码。你在使用MongoDB驱动程序?