Mongo C#驱动程序 - 带$ elemMatch的LINQ查询

时间:2015-03-20 17:25:47

标签: c# mongodb linq mongodb-.net-driver

我有一个包含以下文档的集合:

{'data': [{'Depth': 0.0, 'Value': 123.0},
          {'Depth': 0.5, 'Value': 456.0},
          {'Depth': 1.0, 'Value': 111.0},
          {'Depth': 1.5, 'Value': 321.0},
          {'Depth': 2.0, 'Value': 987.0},
          {'Depth': 2.5, 'Value': 666.0},
          ...
          {'Depth': 3.0, 'Value': 453.0}],
 'datatype': 'Sometype'

}

我想执行如下所示的查询:

curves = db.curvedata.findOne(
 {
  "datatype" : "Sometype",
  "data": {
   "$elemMatch": {
    "Depth" : { "$gt": 13000, "$lt": 13100 },
    "Value" : { "$gt": 20, "$lt": 100 } }}})

即找到深度范围和值范围内的所有曲线。这很好用 - 我用pymongo运行它。

我一直试图弄清楚如何使用Mongo DB C#驱动程序使用LINQ执行相同的查询。这就是我到目前为止所做的:

var curvedata = database.GetCollection("curvedata");
var query =
    from c in curvedata.AsQueryable()
    where c["datatype"] == "Sometype"
          && c["data"]["Depth"] > 13000
          && c["data"]["Depth"] < 13100
          && c["data"]["Value"] > 20
          && c["data"]["Value"] < 100
    select c;

这会运行并返回一个结果 - 但是与pymongo查询得到的结果不同。也就是说,我使用C#查询获得了更多文档。

任何想法我做错了什么?我对LINQ的翻译有问题吗?

0 个答案:

没有答案