MST

星途 面试题库

面试题:MongoDB中数组查询的常用操作

假设在MongoDB的集合中有文档如下:{ _id: 1, items: [ 'apple', 'banana', 'cherry' ] }, { _id: 2, items: [ 'date', 'fig' ] }。请写出查询items数组中包含'banana'的文档的查询语句,并解释$in和$elemMatch在数组查询中的区别。
31.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 查询语句
db.collection.find({ items: 'banana' });

这种简单写法即可查询出items数组中包含banana的文档。

  1. $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数组中subjectmathscore大于75的文档,就需要使用db.collection.find({ scores: { $elemMatch: { subject: "math", score: { $gt: 75 } } } })
      • 特点:它要求数组中至少有一个元素完全匹配所给定的所有条件。对于多个条件的匹配,它更注重元素内部多个条件的组合关系。