Mongodb C#驱动程序中SetUnion的等效值

Mongodb C#驱动程序中SetUnion的等效值,mongodb,mongodb-.net-driver,Mongodb,Mongodb .net Driver,我在mongodb文档中有一个字段,其中包含一个数字数组。我想用新收到的号码更新此字段。但我只需要在数组中不存在数字时添加数字。在MongoDB中,我们可以使用$setUnion,但在C#driver端我不确定。任何人都可以提出解决方案。$setUnion用于生成聚合输出 您需要使用c#driver中的AddToSetEach 请在插入后查找带有复选框的完整代码段 public static void Main() { var client = new MongoClie

我在mongodb文档中有一个字段,其中包含一个数字数组。我想用新收到的号码更新此字段。但我只需要在数组中不存在数字时添加数字。在MongoDB中,我们可以使用$setUnion,但在C#driver端我不确定。任何人都可以提出解决方案。

$setUnion
用于生成聚合输出

您需要使用c#driver中的
AddToSetEach

请在插入后查找带有复选框的完整代码段

public static void Main()
    {
        var client = new MongoClient("mongodb://localhost:27017");
        var database = client.GetDatabase("test");

        var collection = database.GetCollection<KalaimaniData>("kalaimani");

        // create array to inser
        var arrayToInsert = new[] { 1, 4, 5, 6 };
        var arrayToMerge = new[] { 2, 3, 4, 5 };
        var arrayExpected = new[] { 1, 4, 5, 6, 2, 3 };

        var doc = new KalaimaniData { Numbers = arrayToInsert };

        collection.InsertOne(doc);

        var filter = Builders<KalaimaniData>.Filter.Eq(x => x.Id, doc.Id);

        var updateDef = new UpdateDefinitionBuilder<KalaimaniData>().AddToSetEach(x => x.Numbers, arrayToMerge);

        collection.UpdateOne(filter, updateDef);

        // retrive and compare
        var changed = collection.Find(filter).First();

        var matched = 0;
        foreach (var element in arrayExpected)
        {
            if (changed.Numbers.Contains(element))
            {
                matched++;
            }
        }

        if (changed.Numbers.Length == matched)
        {
            Console.WriteLine("OK");
        }
        else
        {
            Console.WriteLine("NOK");
        }

        Console.ReadLine();
    }

    /// <summary>TODO The kalaimani data.</summary>
    class KalaimaniData
    {
        /// <summary>Gets or sets the id.</summary>
        public ObjectId Id { get; set; }

        /// <summary>Gets or sets the numbers.</summary>
        public int[] Numbers { get; set; }
    }
publicstaticvoidmain()
{
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“测试”);
var collection=database.GetCollection(“kalaimani”);
//创建要插入的数组
var arraytointer=new[]{1,4,5,6};
var arrayToMerge=new[]{2,3,4,5};
var arrayExpected=new[]{1,4,5,6,2,3};
var doc=new KalaimaniData{Numbers=arrayToInsert};
托收。插入通(doc);
var filter=Builders.filter.Eq(x=>x.Id,doc.Id);
var updateDef=new UpdateDefinitionBuilder().AddToSetEach(x=>x.Numbers,arrayToMerge);
collection.UpdateOne(filter,updatedf);
//检索和比较
var changed=collection.Find(filter.First();
var=0;
foreach(arrayExpected中的var元素)
{
if(已更改的.编号.包含(元素))
{
匹配++;
}
}
if(changed.Numbers.Length==匹配)
{
控制台。写入线(“OK”);
}
其他的
{
控制台。写入线(“NOK”);
}
Console.ReadLine();
}
///去kalaimani的资料。
KalaimaniData类
{
///获取或设置id。
公共对象Id{get;set;}
///获取或设置数字。
公共int[]数字{get;set;}
}

$setUnion
用于生成聚合输出

您需要使用c#driver中的
AddToSetEach

请在插入后查找带有复选框的完整代码段

public static void Main()
    {
        var client = new MongoClient("mongodb://localhost:27017");
        var database = client.GetDatabase("test");

        var collection = database.GetCollection<KalaimaniData>("kalaimani");

        // create array to inser
        var arrayToInsert = new[] { 1, 4, 5, 6 };
        var arrayToMerge = new[] { 2, 3, 4, 5 };
        var arrayExpected = new[] { 1, 4, 5, 6, 2, 3 };

        var doc = new KalaimaniData { Numbers = arrayToInsert };

        collection.InsertOne(doc);

        var filter = Builders<KalaimaniData>.Filter.Eq(x => x.Id, doc.Id);

        var updateDef = new UpdateDefinitionBuilder<KalaimaniData>().AddToSetEach(x => x.Numbers, arrayToMerge);

        collection.UpdateOne(filter, updateDef);

        // retrive and compare
        var changed = collection.Find(filter).First();

        var matched = 0;
        foreach (var element in arrayExpected)
        {
            if (changed.Numbers.Contains(element))
            {
                matched++;
            }
        }

        if (changed.Numbers.Length == matched)
        {
            Console.WriteLine("OK");
        }
        else
        {
            Console.WriteLine("NOK");
        }

        Console.ReadLine();
    }

    /// <summary>TODO The kalaimani data.</summary>
    class KalaimaniData
    {
        /// <summary>Gets or sets the id.</summary>
        public ObjectId Id { get; set; }

        /// <summary>Gets or sets the numbers.</summary>
        public int[] Numbers { get; set; }
    }
publicstaticvoidmain()
{
var客户端=新的MongoClient(“mongodb://localhost:27017");
var database=client.GetDatabase(“测试”);
var collection=database.GetCollection(“kalaimani”);
//创建要插入的数组
var arraytointer=new[]{1,4,5,6};
var arrayToMerge=new[]{2,3,4,5};
var arrayExpected=new[]{1,4,5,6,2,3};
var doc=new KalaimaniData{Numbers=arrayToInsert};
托收。插入通(doc);
var filter=Builders.filter.Eq(x=>x.Id,doc.Id);
var updateDef=new UpdateDefinitionBuilder().AddToSetEach(x=>x.Numbers,arrayToMerge);
collection.UpdateOne(filter,updatedf);
//检索和比较
var changed=collection.Find(filter.First();
var=0;
foreach(arrayExpected中的var元素)
{
if(已更改的.编号.包含(元素))
{
匹配++;
}
}
if(changed.Numbers.Length==匹配)
{
控制台。写入线(“OK”);
}
其他的
{
控制台。写入线(“NOK”);
}
Console.ReadLine();
}
///去kalaimani的资料。
KalaimaniData类
{
///获取或设置id。
公共对象Id{get;set;}
///获取或设置数字。
公共int[]数字{get;set;}
}

AddToSetEach是关键。。。谢谢你的回答每个人都是关键。。。谢谢你的回答