Добавить ссылку на другой документ в MongoDB C# MongoDB.Driver - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть два класса:

 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" только поле _id класса MDBParts. Можете ли вы помочь мне заметить, как это сделать?

1 Ответ

0 голосов
/ 25 февраля 2020

Ссылки между коллекциями деталей и продуктов

 `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;
        }
    }
...