第三章 MongoDB的增删改查(3)

第三章 MongoDB的增删改查(3)

本章介绍了MongoDB的常用操作,具体包括如下:

  • 插入文档
  • 删除文档
  • 更新文档
  • 查找文档
1.查找文档

db.collection.find(query, projection)

参数类型说明
querydocument可选。
指定查询条件,返回所有满足条件的文档。
projectiondocument可选。
指定返回字段。如果没有指定,返回文档的所有字段
简单查询
db.books.remove({})
db.books.insertMany(
	{"_id": 1, "name": "java", amount: 20}
	{"_id": 2, "name": "mysql", amount: 30}
	{"_id": 3, "name": "linux", amount: 40}
)

-- 查找所有文档
db.books.find({})

-- 等值查询
db.books.find({"name": "java"})

-- 返回指定字段 _id字段会默认返回, 除非指定{_id: 0}
db.books.find({"_id": 1}, {"name": 1})
{
	"_id": 1, "name": "java"
}
使用操作符查询

Mongodb提供许多查询操作符帮助我们查询在集合中的文档

  • 使用 $in 操作符返回集合中 _id 等于5或者 8
db.bios.find(
   { _id: { $in: [ 5, 6] } }
)
  • 使用 $gt 操作符返回出生日期在 1998-01-01 之后的文档
db.bios.find( { birth: { $gt: new Date('1998-01-01') } } )
  • 范围查询
db.bios.find( { birth: { $gt: new Date('1940-01-01'), $lt: new Date('1960-01-01') } } )
  • 多条件查询
db.bios.find( {
   birth: { $gt: new Date('1920-01-01') },
   death: { $exists: false }
} )
嵌套查询
  • 精确的查询嵌套文档
-- 当嵌套文档name精确匹配{first: "Yukihiro", last: "Matsumoto"}条件,包括顺序
,才返回文档
db.bios.find(
    { name: { first: "Yukihiro", last: "Matsumoto" } }
)

-- 上面的条件并不会匹配以下嵌套文档
-- 1.该文档多一个字段,不能精确匹配
{
   first: "Yukihiro",
   aka: "Matz",
   last: "Matsumoto"
}
-- 2.顺序不一样,不能精确匹配
{
   last: "Matsumoto",
   first: "Yukihiro"
}
  • 查询嵌套文档的字段
当嵌套文档name包含字段first的值为 Yukihiro 和字段last的值为 Matsumoto,返回文档
db.bios.find(
   {
     "name.first": "Yukihiro",
     "name.last": "Matsumoto"
   }
)

-- 下面两个嵌套文档能被匹配
{
  first: "Yukihiro",
  aka: "Matz",
  last: "Matsumoto"
}
{
  last: "Matsumoto",
  first: "Yukihiro"
}
查询数组
  • 数组contribs包含元素"UNIX"时,返回文档
db.bios.find( { contribs: "UNIX" } )
  • 数组包含元素"ALGOL"和"Lisp",返回文档
db.bios.find( { contribs: { $all: [ "ALGOL", "Lisp" ] } } )
参考

MongoDB find()