mongo .net驱动程序生成错误的查询

时间:2016-09-23 14:34:02

标签: .net mongodb

我想使用.net驱动程序mongo来编写一个查询,该查询将检查子集合的元素的属性是否等于其所有者的属性。 为了更清楚,我将举一个例子

假设我们与@ 子女有@ 人员集合 我们想找到任何与他的孩子名字相同的人员

var query = db.GetCollection("personnels")
                .AsQueryable()
                .Select(person => person.Children.Any(child => child.FirstName == person.FirstName));

此查询将被翻译为

db.getCollection('personnels').aggregate([
    {
        "$project": {
            "__fld0": {
                "$anyElementTrue": {
                    "$map": {
                        "input": "$Children",
                        "as": "child",
                        "in": {
                            "$eq": [
                                "$$child.FirstName",
                                "$$child.FirstName"
                            ]
                        }
                    }
                }
            },
            "_id": 0
        }
    }
])

但出了点问题

代替此" $eq": [ "$$child.FirstName","$$child.FirstName" ],

查询应该被翻译成

"$eq": [ "$FirstName","$$child.FirstName" ]

告诉我,我做错了什么?

1 个答案:

答案 0 :(得分:0)

我建议使用FilterDefinitionBuilder类型来查询信息。虽然LINQ很有用,但我发现使用LINQ会使更复杂的查询变得混乱。转到此链接以获取更多文档。 http://mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/definitions/

以下是如何创建过滤器的示例...

var builder = Builders<BsonDocument>.Filter;
var filter = builder.Eq("x", 10) & builder.Lt("y", 20);

希望这有帮助!