在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在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()
指定相等条件: 复制代码 代码如下: db.inventory.find( { type: "snacks" } )
使用query操作符指定条件: 复制代码 代码如下: db.inventory.find( { type: { $in: [ 'food', 'snacks' ] } } ) 虽然这个查询可以使用$or操作符,但是对于同一个字段的相等检测使用$in而不是$or。 指定AND条件: 复制代码 代码如下: db.inventory.find( { type: 'food', price: { $lt: 9.95 } } ) 这个查询选择所有type字段值等于food,而且price字段值小于9.95的文档。 指定OR条件: 复制代码 代码如下: db.inventory.find(
{ $or: [ { qty: { $gt: 100 } }, { price: { $lt: 9.95 } } ] } ) 同时指定AND和OR条件: 复制代码 代码如下: 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' } )
数组: 复制代码 代码如下: db.inventory.find( { tags: [ 'fruit', 'food', 'citrus' ] } ) 匹配一个数组元素: 可以在数组中指定一个单独的元素用于"相等"匹配。这种规范匹配的数组至少需要包含一个指定的元素。下面的例子将匹所有tags是一个数组且包含"fruit"元素的文档: 复制代码 代码如下: db.inventory.find( { tags: 'fruit' } ) 匹配数组的指定元素: 在数组中匹配指定索引或位置与条件相等的文档。下面例子中,使用点符号匹配所有tags是一个数组,且第一个元素是"fruit"的文档: 复制代码 代码如下: db.inventory.find( { 'tags.0' : 'fruit' } ) 子文档数组: 使用数组索引匹配子文档的字段: 复制代码 代码如下: 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' } } } ) |
请发表评论