db.users.find(
{"age": 20, "gender": "male"}
)
db.test.find(
{},
{"url": 1, "pageviews": 1, "_id": 0} // 默认情况下"_id"键总是被返回
)
db.users.find(
{"age": {"$gte": 20, "lte": 30}}
)
对于文档的键值不等于某个特定值的情况,需要使用条件操作符"
$ne",它表示!=
db.users.find(
{"user_id": {"$in": [12345, "joe"]}}
)
要是"$in"对应的数组只有一个值,那和直接匹配这个值效果一样
db.users.find(
{"user_id": {"$in": ["joe"]}} // == {"user_id": "joe"}
)
"
$or"接受一个包含所有可能条件的数组作为参数,OR型查询第一个条件应该尽可能多的匹配更多的文档,这样才最高效
db.raffle.find(
{"$or": [
{"ticket_no": {"$in": [451, 623, 985]}},
{"winner": true}
]}
)
db.users.find(
{"id_number": {"$not": {"$mod": [5, 1]}}}
)
一个键可以有任何多个条件,但是一个键不能对应多个更新修改器。
db.test.find(
{"url": {"$in": [null], "$exists": true}}
)
db.test.insert({"bar": /foo/})
db.test.find({"bar": /foo/})
MongoDB可以为前缀型正则表达式(比如: /^zhang/)查询创建索引,所以这种类型的查询会非常高效
db.food.find(
{"fruit": {"$all": ["apple", "banana"]}}
)
也可以使用整个数组进行精确匹配,但是,精确匹配对于缺少元素或者元素冗余的情况失灵
db.blog.findOne(
criteria,
{"comments": {"$slice": 10}}
)
$slice也可以指定偏移值以及希望返回的元素数量,来返回元素集合中间位置的某些结果
db.blog.findOne(
criteria,
{"comments": {"$slice": [23, 10]}} //[偏移量(从24开始), 总个数]
)
返回一个匹配的数组元素
db.blog.find(
{"comments.name": "zhangsan"},
{"comments.$": 1}
)
数组和范围查询的相互作用
db.users.find(
{"name": {"first": "joe", "last": "schmoe"}}
)
只针对键/值对进行查询(对于文档中包含"."的键[例如:URL],点表示法会有局限性,一种解决办法是在插入前或者提取后执行一个全局替换,将"."替换成一个URL中非法字符)
db.users.find(
{"name.first": "joe", "name.last": "schmoe"}
)
$elemMatch:在查询条件中部分指定匹配数组中的单个内嵌文档。$elemMatch将限定条件进行分组,仅当需要对一个内嵌文档的多个键进行操作时才会用到
db.blog.find(
{"comments": {"$elemMatch": {
"author": "joe",
"score": {"$gte": 5}
}}}
)