我想使用.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" ]
告诉我,我做错了什么?
答案 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);
希望这有帮助!