C# 如何设置bsonDocument的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) 更

我得到了一个复杂的类(名为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驱动程序?