
查询
|
55
这时,不能直接使用
db.blog.find({"comments" : {"author" : "joe", "score" : {"$gte" :
5}}})
进行查询。内嵌文档的匹配必须匹配整个文档,而这个查询不会匹配
"comment"
键。
使用
db.blog.find({"comments.author" : "joe", "comments.score" : {"$gte" : 5}})
也
不行,因为符合作者条件的评论与符合分数条件的评论可能不是同一条。也就是说,这会
返回上面显示的那个文档:因为它匹配了第一条评论中的
"author" : "joe"
和第二条评论
中的
"score" : 6
。
要正确指定一组条件而无须指定每个键,请使用
"$elemMatch"
。这种模糊的命名条件允许
你在查询条件中部分指定匹配数组中的单个内嵌文档。正确的查询如下所示:
> db.blog.find({"comments" : {"$elemMatch" :
... {"author" : "joe", "score" : {"$gte" : 5}}}})
"$elemMatch"
允许你将限定条件进行“分组”。仅当需要对一个内嵌文档的多个键进行操
作时才会用到它。
4.4
$where
查询
键
–
值对是一种相当有表现力的查询方式,但有些查询依然无法表示。对于无法以其他方
式执行的查询,可以使用
"$where"
子句,它允许你在查询中执行任意的
JavaScript
代码。
这样就能在查询中做大部分事情了。为安全起见,应该严格限制或消除 ...