我有一个包含以下文档的集合:
{'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的翻译有问题吗?