在MongoDB中db.collection.find()方法用于从集合中检索文档。db.collection.find()方法返回一个检索到文档的游标。db.collection.findOne()方法也执行读操作,返回一条文档。在内部实现上,db.collection.findOne()方法是db.collection.find()使用limit 1。
查询集合中的所有文档:
1.一个空的query文档({})可以查出一个集合中的所有文档:
复制代码 代码如下:db.inventory.find( {} )
2.没有指定query文档的find()等价于指定一个空query文档的查询。因此,下面的查询和上面的查询时等价的:
复制代码 代码如下:db.inventory.find()
指定相等条件:
使用{<field>:<value>}文档指定相等条件,查询所有包含<field>字段,值为<value>的文档。下面的例子从inventory集合中检索所有type字段值为snacks的所有文档:
复制代码 代码如下:db.inventory.find( { type: "snacks" } )
使用query操作符指定条件:
在MongoDB中可以使用query操作符指定条件。下面的例子从inventory集合中查询type字段的值为'food'或者'snacks':
复制代码 代码如下:db.inventory.find( { type: { $in: [ 'food', 'snacks' ] } } )
虽然这个查询可以使用$or操作符,但是对于同一个字段的相等检测使用$in而不是$or。
指定AND条件:
符合查询可以在条件中指定多个文档字段。逻辑AND连接一起的复合查询条件,查询符合所有条件的文档。下面例子中,query文档指定等于food和price字段小于($lt)指定值的查询条件:
复制代码 代码如下:db.inventory.find( { type: 'food', price: { $lt: 9.95 } } )
这个查询选择所有type字段值等于food,而且price字段值小于9.95的文档。
指定OR条件:
使用$or操作符,可以指定一个使用逻辑OR连接的复合查询,查询选择集合中至少匹配一个条件的文档。下面的例子中,查询集合中所有qty字段值大于($gt)100或者price字段值小于($lt)9.95的文档:
复制代码 代码如下:db.inventory.find(
{ $or: [
{ qty: { $gt: 100 } },
{ price: { $lt: 9.95 } }
]
}
)
同时指定AND和OR条件:
使用更多的条件,可以指定精确的查询条件。在下面的例子中,符合query文档选择集合中所有type字段值为'food',并且qty的值大于($gt)100或者price值小于($lt)9.95的文档:
复制代码 代码如下:db.inventory.find( { type: 'food', $or: [ { qty: { $gt: 100 } },
{ price:{ $lt:9.95 } }
]
} )
子文档:
当字段包含嵌入的文档(即子文档),可以指定整个子文档作为一个字段的值,或使用点符号“进入”子文件,指定该子文档的各个字段的值:
1.精确匹配子文档:
指定一个相等条件匹配整个子文档,使用query文档{<field>:<value>},<value>用于匹配子文档。“相等”匹配子文档需要子文档的字段精确匹配<value>条件,包括字段的顺序。下面的例子查询producer字段的值匹配一个仅包含值为“ABC123”的company字段和值为“123 Street”的子文档,并且有先后顺序:
复制代码 代码如下:db.inventory.find(
{
producer: {
company: 'ABC123',
address: '123 Street' }
}
)
2.子文档字段“相等”匹配:
查询集合中指定字段的子文档的字段包含指定条件的文档。下面的例子使用点符号查询producer的子文档的conmpany字段值为“ABC123”的所有文档:
复制代码 代码如下:db.inventory.find( { 'producer.company': 'ABC123' } )
数组:
当字段值是一个数组时,可以使用数组精确匹配或者在数组中指定值。如果数组元素是一个子文档,可以使用点符号指定字段。
精确匹配数组:
在数组中指定相等条件,使用query文档{<field>:<value>},<value>是用于匹配的数组。数组的精确匹配需要数组的字段完全匹配指定的<value>,包括元素的顺序:
复制代码 代码如下:db.inventory.find( { tags: [ 'fruit', 'food', 'citrus' ] } )
匹配一个数组元素:
可以在数组中指定一个单独的元素用于"相等"匹配。这种规范匹配的数组至少需要包含一个指定的元素。下面的例子将匹所有tags是一个数组且包含"fruit"元素的文档:
复制代码 代码如下:db.inventory.find( { tags: 'fruit' } )
匹配数组的指定元素:
在数组中匹配指定索引或位置与条件相等的文档。下面例子中,使用点符号匹配所有tags是一个数组,且第一个元素是"fruit"的文档:
复制代码 代码如下:db.inventory.find( { 'tags.0' : 'fruit' } )
子文档数组:
使用数组索引匹配子文档的字段:
如果知道子文档数组的索引,就可以指定子文档的位置。下面的例子查询所有memo包含一个数组且第一个元素是一个子文档,子文档的by字段值为"shipping"的文档:
复制代码 代码如下:db.inventory.find( { 'memos.0.by': 'shipping' } )
匹配一个字段不使用数组索引:
如果不知道子文档的索引位置,使用点连接数组的字段名称和子文档字段名称。下面的例子查询所有memos字段是一个数组,且数组包含至少一个by字段值为"shipping"的子文档的文档:
复制代码 代码如下:db.inventory.find( { 'memos.by': 'shipping' } )
匹配多个字段:
为了在子文档中匹配多个字段,可以使用点符号或者$elemMatch操作符。下面的例子使用点符号查询memos字段值是一个数组,并且子文档memo字段等于"on tiem",by字段等于"shipping"的文档:
复制代码 代码如下:db.inventory.find(
{ 'memos.memo': 'on time', 'memos.by': 'shipping' }
)
下面的例子使用$elemMatch操作符查询memos字段值是一个数组,并且子文档memo字段等于"on tiem",by字段等于"shipping"的文档:
复制代码 代码如下:db.inventory.find( {
memos: {
$elemMatch: {
memo : 'on time',
by: 'shipping' }
}
}
)
MongoDB,查询
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]