【问题标题】:Add a reference to another document in MongoDB C# MongoDB.Driver在 MongoDB C# MongoDB.Driver 中添加对另一个文档的引用
【发布时间】:2020-02-17 12:00:04
【问题描述】:

我有两个班级:

 public class MDBProducts
    {
        public string _id { get; set; }
        public string order_number { get; set; }
        [BsonIgnoreIfNull]
        public List<Classes.MDBParts[]> partsId { get; set; }
    }
public class MDBParts
    {
        public string _id { get; set; }
        public string accountCode { get; set; }
    }

使用这个查找命令 mongodb 嵌入了整个文档信息。

string param = "{$lookup: { from: 'Parts',localField: 'order_number',foreignField: 'accountCode',as:'partsId'} }";
BsonDocument document = BsonDocument.Parse(param);
var pipeline = new[] { document };
var result = Classes.MdB.connectDbProducts().Aggregate<MDBProducts>(pipeline).ToList();

我想只添加到“partsId”的 MDBParts 类 _id 字段。请您帮我注意一下,该怎么做?

【问题讨论】:

    标签: mongodb mongodb-.net-driver dbref


    【解决方案1】:

    Parts 和 Products 集合之间的引用

     `var lookup1 = new BsonDocument
                {
                    {
                        "$lookup",
                        new BsonDocument
                        {
                            { "from", "Parts" },
                            { "localField", "order_number" },
                            { "foreignField", "productNumber" },
                            { "as", "partsId" }
                        }
                    },
                };
    
                var lookup2 = new BsonDocument
                {
                    {
                        "$project",
                        new BsonDocument
                        {
                            { "partsId", "$partsId._id" },
                            { "id", 1 }
                        }
                    }
                };
    
                var pipeline = new[] { lookup1, lookup2 };
                var result = connectDbProducts().Aggregate<Products>(pipeline).ToList();
    
                foreach (var item in result)
                {
                    if (item.partsId.Count != 0)
                    {
                        var filterID = Builders<Products>.Filter.Eq(x => x._id, item._id);
                        var setTableTop = Builders<Products>.Update.Set(x => x.partsId, item.partsId);
                        connectDbProducts().UpdateOne(filterID, setTableTop);
                    }
                    else
                    {
                        var filterID = Builders<Products>.Filter.Eq(x => x._id, item._id);
                        var setTableTop = Builders<Products>.Update.Unset(x => x.partsId);
                        connectDbProducts().UpdateOne(filterID, setTableTop);
                    }
                }`
    

    产品类

     public class Products
    {
        public object _id { get; set; }
        public string electricity_based_on { get; set; }
        public double? full_price { get; set; }
        public DateTime manufacturing_date { get; set; }
        public string order_code { get; set; }
        public string order_comment_names { get; set; }
        public string order_name { get; set; }
        public string order_number { get; set; }
        public double? order_quantity { get; set; }
        public double? unit_price { get; set; }
        [BsonIgnoreIfNull]
        public string user_name { get; set; }
        [BsonIgnoreIfNull]
        public DateTime user_checkTime { get; set; }
        [BsonIgnoreIfNull]
        public object order_comments { get; set; }
        [BsonIgnoreIfNull]
        public string tabletop_letter { get; set; }
        [BsonIgnoreIfNull]
        public string sub_3_4 { get; set; }
        [BsonIgnoreIfNull]
        public List<string> partsId { get; set; }
    }
    

    与数据库的连接

    public static IMongoCollection<Products> connectDbProducts()
        {
            try
            {
                MongoClient dbClient = new MongoClient(Properties.Resource1.mongoDB);
                var db = dbClient.GetDatabase("Manufacturing");
                var collection = db.GetCollection<Products>("Products");
    
                return collection;
            }
            catch (Exception toMongoDBParts)
            {
                WriteLogFile("--MongoDB connection to Parts collection--", toMongoDBParts.StackTrace, toMongoDBParts.Message);
                throw;
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 2014-03-19
      • 2015-06-12
      • 2021-05-05
      • 2017-09-12
      • 2017-02-17
      • 2018-12-08
      • 1970-01-01
      相关资源
      最近更新 更多