面试题答案
一键面试- 查询语句:
db.collection.find({ items: 'banana' });
这种简单写法即可查询出items
数组中包含banana
的文档。
- $in和$elemMatch在数组查询中的区别:
- $in:
- 用法:
$in
操作符用于查询字段值在给定数组中的文档。当查询数组字段时,如果要匹配数组中的任何一个值,使用$in
。例如,假设集合中有文档{ _id: 1, numbers: [1, 2, 3] }
,要查询numbers
数组中包含2或4的文档,可以使用db.collection.find({ numbers: { $in: [2, 4] } })
。 - 特点:只要数组中有一个元素匹配
$in
数组中的值,文档就会被选中。对于数组中的多个元素匹配条件,它不关心元素的顺序和组合方式。
- 用法:
- $elemMatch:
- 用法:
$elemMatch
操作符主要用于在查询数组字段时,对数组中的元素进行多个条件的匹配。当数组中的元素是对象,并且需要同时满足对象中的多个条件时,就需要使用$elemMatch
。例如,假设集合中有文档{ _id: 1, scores: [ { subject: "math", score: 80 }, { subject: "english", score: 70 } ] }
,要查询scores
数组中subject
为math
且score
大于75的文档,就需要使用db.collection.find({ scores: { $elemMatch: { subject: "math", score: { $gt: 75 } } } })
。 - 特点:它要求数组中至少有一个元素完全匹配所给定的所有条件。对于多个条件的匹配,它更注重元素内部多个条件的组合关系。
- 用法:
- $in: