Skip to main content
 首页 » 编程设计

c#之如何将 C# 中的嵌套集合插入到 mongo db

2024年01月24日23落叶无声

我想用c#创建这样的集合

   Agent_name: { 
    f: "vbv", 
    l: "vbvbv" 
    }, 
   "Agent_LoginSessionId" : "", 
   "Agent_GroupCode" : "", 
   "Agent_dtmCreated" : "", 
   "Agent_dtmLastLogin" : "", 
   "Agent_strIsActive" : "" 
 
    stamps: { 
     ins: "", 
     upd: "", 
     createUsr: "", 
     updUsr: "", 
     Ins_Ip: "", 
     Upd_IP: "" 
 
 } 

我的 C# 代码是这样的:

MongoCollection<BsonDocument> Agents = mydb.GetCollection<BsonDocument>("Agents"); 
       BsonDocument collectionAgent = new BsonDocument { 
                   { "Agent_Login", Aid },   
                   {"Agent_Pwd",Apwd}, 
                   {"Agent_Rpwd",Arpwd}, 
 
                   Agent_Name:      
                      { "f", Afname}, 
                      {"l", Alname} , 
 
 
                   {"Agent_LoginSessionId",""}, 
                   {"Agent_GroupCode",AgroupId}, 
                   {"Status",AStastus} 
                  }; 
       Agents.Insert(collectionAgent) 

在C#中如何实现呢?它需要任何特定的驱动程序才能安装。请提出一些建议?

请您参考如下方法:

要使用 .NET 驱动程序将文档插入 MongoDB,对于如何在程序中表示数据,您有两种选择:

  1. 使用 BsonDocument 对象模型(如示例代码中所示)
  2. 使用 C# 类并让驱动程序将它们映射到 BSON 文档和从 BSON 文档映射

使用 BsonDocument 对象模型创建复杂的 BSON 文档可能会变得复杂,主要是因为涉及所有嵌套。以下是使用 BsonDocument 对象模型将该文档插入到集合中的方法:

var bsonDocument = new BsonDocument 
{ 
    { "_id", ObjectId.GenerateNewId() }, 
    { "Agent_name", new BsonDocument 
        { 
            { "f", "vbv" }, 
            { "l", "vbvbv" } 
        } 
    }, 
    { "Agent_LoginSessionId", "" }, 
    { "Agent_GroupCode", "" }, 
    { "Agent_dtmCreated", "" }, 
    { "Agent_dtmLastLogin", "" }, 
    { "Agent_strIsActive", "" }, 
    { "stamps", new BsonDocument 
        { 
            { "ins", "" }, 
            { "upd", "" }, 
            { "createUsr", "" }, 
            { "updUsr", "" }, 
            { "Ins_Ip", "" }, 
            { "Upd_Ip", "" } 
        } 
    } 
}; 
collection.Insert(bsonDocument); 

我在文档中添加了一个“_id”元素,因为所有 MongoDB 文档都有一个“_id”(如果您愿意,您可以让服务器自动添加它)。

另一种方法是定义一组 C# 类,驱动程序可以将其映射到 BSON 文档或从 ​​BSON 文档映射。

以下是使用 C# 类插入同一文档的方法:

var agent = new Agent 
{ 
    Id = ObjectId.GenerateNewId(), 
    Name = new AgentName { First = "vbv", Last = "vbvbv" }, 
    LoginSessionId = "", 
    GroupCode = "", 
    Created = "", 
    LastLogin = "", 
    IsActive = "", 
    Stamps = new Stamps 
    { 
        Inserted = "", 
        Updated = "", 
        CreateUser = "", 
        UpdateUser = "", 
        InsertIPAddress = "", 
        UpdateIPAddress = "" 
    } 
}; 
collection.Insert(agent); 

这里是 C# 类定义。我对属性使用了 .NET 命名约定,并使用 [BsonElement("...")] 属性指定 BSON 文档中元素的相应名称:

public class Agent 
{ 
    public ObjectId Id { get; set; } 
    [BsonElement("Agent_name")] 
    public AgentName Name { get; set; } 
    [BsonElement("Agent_LoginSessionId")] 
    public string LoginSessionId { get; set; } 
    [BsonElement("Agent_GroupCode")] 
    public string GroupCode { get; set; } 
    [BsonElement("Agent_dtmCreated")] 
    public string Created { get; set; } 
    [BsonElement("Agent_dtmLastLogin")] 
    public string LastLogin { get; set; } 
    [BsonElement("Agent_strIsActive")] 
    public string IsActive { get; set; } 
    [BsonElement("stamps")] 
    public Stamps Stamps { get; set; } 
} 
 
public class AgentName 
{ 
    [BsonElement("f")] 
    public string First { get; set; } 
    [BsonElement("l")] 
    public string Last { get; set; } 
} 
 
public class Stamps 
{ 
    [BsonElement("ins")] 
    public string Inserted { get; set; } 
    [BsonElement("upd")] 
    public string Updated { get; set; } 
    [BsonElement("createUsr")] 
    public string CreateUser { get; set; } 
    [BsonElement("updUser")] 
    public string UpdateUser { get; set; } 
    [BsonElement("Ins_Ip")] 
    public string InsertIPAddress { get; set; } 
    [BsonElement("Upd_Ip")] 
    public string UpdateIPAddress { get; set; } 
}