0

我有两节课:

 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 字段。你能帮我注意一下,怎么做?

4

1 回答 1

0

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;
        }
    }
于 2020-02-25T05:50:35.433 回答