有一个班级人士,他认识几位作者,并且有一位受人欢迎的作者:
public class Author
{
public string name;
public string firstname;
}
public class Person
{
public string favoredAuthor;
public Author[] knownAuthors;
}
json呈现形式如下:
{
"_id" : ObjectId("5b2955cf79cd67d3d09ddbe8"),
"knownAuthors" : [
{
"name" : "Müllmann",
"firstname" : "Dieter"
},
{
"name" : "Marx",
"firstname" : "Karl"
},
{
"name" : "Hildebrandt",
"firstname" : "Saftarsch"
}
],
"favoredAuthor" : "Marx"
}
我想使用以下linq表达式查询人喜欢的-Author-:
// gives no result:
var favoredAuthor = persons.AsQueryable()
.Select(x => x.knownAuthors.Where(a => a.name == x.favoredAuthor))
.FirstOrDefault();
如果我在“人员列表”上工作,则具有相同的作用:
// working (result is Author 'Karl Marx'):
var persons = new List<Person>() { new Person() }.AsQueryable();
var person = persons.Select(x => x.knownAuthors.Where(a => a.name == x.favoredAuthor).FirstOrDefault())
.FirstOrDefault();
这是MongoDB官方驱动程序中的错误吗?还是我做错了? 我测试过 Visual Studio 2017 MongoDb驱动程序2.7.0以及2.6.1
任何想法,男孩和女孩?
答案 0 :(得分:0)
MongoDB无法处理这样的两个字段。这是数据库系统的局限性。例如,请参见MongoDB : querying documents with two equal fields, $match and $eq和可能的解决方法(一定要了解性能成本)。
上一次遇到这种情况时,我们记录了整个情况,并确保从服务器获取数据集后,将foo == bar
条件与LINQ-to-Objects一起应用。