【问题标题】:MongoDB C# driver: how to use $in operator for nested embedded documents?MongoDB C# 驱动程序:如何将 $in 运算符用于嵌套的嵌入式文档?
【发布时间】:2017-06-20 15:24:43
【问题描述】:

我正在尝试通过 MongoDB C# 驱动程序使用 $in 运算符。

这是一个示例文档:

ObjectField:
    {
      "_id" : ObjectId("59421cd7f39cc1227cb7be55"),
      "ObjectName" : "Customer",
      "FieldName" : "Kind Customer",
      "KeyValues" : [{
          "Key" : "k11",
          "Value" : "v11"
        }, {
          "Key" : "k21",
          "Value" : "v21"
        }]
    }

这是我尝试的第一种方法:

var database = MongoDbClient.GetDatabase("Database");
var builder = Builders<ObjectField>.Filter;
var keys = new List<string>() { "k11", "k21" };
var filter = builder.Eq("ObjectName", "Customer") & builder.Eq("FieldName", "Kind Customer") & builder.In("KeyValues.Key", keys);
var projection = Builders<ObjectField>.Projection.Include("KeyValues.$");
var bsonDocuments = database.GetCollection<ObjectField>("ObjectField").Find(filter).Project(projection).ToList();

但是,它只返回列表中的前一个KeyValue

{
        "_id": ObjectId("59421cd7f39cc1227cb7be55"),
        "KeyValues": [{
            "Key": "k11",
            "Value": "v11"
        }]
    }

这是我尝试的第二种方法:

 var keys = new List<string>() { "k11", "k20" };
 var result = (from x in database.GetCollection<ObjectField>("ObjectField").AsQueryable()
                              where x.KeyValues.Any(y => keys.Contains(y.Key))
                              && x.ObjectName == "Customer" && x.FieldName == "Kind Customer"
                              select x).ToList();

在这种情况下,它返回所有未包含在键中的嵌套记录。

【问题讨论】:

    标签: c# mongodb mongodb.driver


    【解决方案1】:
    var filter = Builders<XXXX>.Filter.In("_id", xxxx.Select(i => i.Id));
    mongoClient.GetCollection<XXXX>("XXXX").DeleteMany(filter);
    

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation would greatly improve its long-term value 通过展示为什么这是一个很好的解决问题的方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多