📜  MongoDB 和 AdHoc 查询: (1)

📅  最后修改于: 2023-12-03 15:32:57.091000             🧑  作者: Mango

MongoDB 和 AdHoc 查询

MongoDB是一种常见的文档数据库。与传统的关系型数据库不同,MongoDB存储的是JSON文档,而非表格。AdHoc查询是MongoDB中的一种查询方法,可以方便地查询MongoDB存储的文档。

查询基础

在MongoDB中,查询是通过使用find方法来实现的。find方法接受一个查询条件作为参数,并返回一个游标对象,通过该游标对象可以访问所有匹配查询条件的文档。

例如,查询一个名为“user”的集合中所有年龄大于20岁的用户:

db.user.find({ "age": { "$gt": 20 } })

其中,{ "age": { "$gt": 20 } }是查询条件,表示查询年龄大于20岁的用户。

查询操作符

MongoDB支持多种查询操作符,用于构建查询条件。

比较操作符

比较操作符用于比较数据的大小。常用的比较操作符有:

  • $eq:等于
  • $ne:不等于
  • $gt:大于
  • $gte:大于等于
  • $lt:小于
  • $lte:小于等于

例如,查询一个集合中大小在10和20之间的所有文档:

db.collection.find({ "size": { "$gt": 10, "$lt": 20 } })
逻辑操作符

逻辑操作符用于组合多个查询条件,并形成更复杂的查询条件。常用的逻辑操作符有:

  • $and:逻辑与
  • $or:逻辑或
  • $not:逻辑非
  • $nor:逻辑或非

例如,查询一个集合中姓名为"John"或年龄大于30岁的所有文档:

db.collection.find({ "$or": [{ "name": "John" }, { "age": { "$gt": 30 } }] })
元素操作符

元素操作符用于检查特定字段是否存在,或者是否满足特定要求。常用的元素操作符有:

  • $exists:检查字段是否存在
  • $type:检查字段类型
  • $mod:检查字段是否可以被某个数字整除

例如,查询一个集合中,所有包含字段"username"的文档:

db.collection.find({ "username": { "$exists": true } })
正则表达式操作符

正则表达式操作符用于查询匹配某个正则表达式的文档。常用的正则表达式操作符有:

  • $regex:正则表达式
  • $options:正则表达式选项(如大小写敏感等)

例如,查询一个集合中,所有姓名以“J”开头的文档:

db.collection.find({ "name": { "$regex": "^J" } })
AdHoc查询

除了使用find方法外,MongoDB还支持使用AdHoc查询来执行一些更复杂的查询操作。AdHoc查询是在MongoDB Shell(命令行界面)中执行的一种查询方式,它可以让我们使用JavaScript代码来进行查询操作。

例如,查询一个名为“user”的集合中所有年龄大于20岁的用户,且姓名以“J”开头的用户:

db.runCommand({
    "find": "user",
    "filter": {
        "$and": [
            { "age": { "$gt": 20 } },
            { "name": { "$regex": "^J" } }
        ]
    }
})

在AdHoc查询中,我们可以使用更复杂的查询语法,同时也可以使用JavaScript代码来执行更详细的逻辑判断。