相当于C#驱动程序中的SetUnion

时间:2016-06-27 09:15:26

标签: mongodb mongodb-.net-driver

我在mongodb文档中有一个字段,其中包含一组数字。我想用新收到的号码更新这个字段。但我只需要在数组中没有数字时添加数字。在MongoDB中我们可以使用$ setUnion,但我不确定在C#驱动程序端。任何人请建议解决方案。

1 个答案:

答案 0 :(得分:0)

$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; }
    }