文章目录

  1. 1. 插入文档
    1. 1.1. 插入一个文档
      1. 1.1.1. 友情提示
    2. 1.2. 插入一个文档,包含_id
    3. 1.3. 插入多个文档
  2. 2. 更新文档
    1. 2.1. 整体更新
    2. 2.2. 局部更新
    3. 2.3. 批量更新
  3. 3. 查询文档
    1. 3.1. 查询所有文档
    2. 3.2. 指定等于查询条件
    3. 3.3. 查询操作符指定查询条件
    4. 3.4. 指定 与 查询条件
    5. 3.5. 指定 或 查询条件
    6. 3.6. 指出查询字段
    7. 3.7. 使用模糊查询
    8. 3.8. 查询中使用排序
    9. 3.9. 查询数量
    10. 3.10. 消除重复行
    11. 3.11. 分页查询
  4. 4. 删除文档
    1. 4.1. 删除所有文档
    2. 4.2. 删除匹配条件的文档

MongoDB的逻辑结构主要由 文档(document)、集合(collection)和数据库(database)这三部分组成的。数据库(database)类似于MySQL的数据库(database),集合(collection)类似于MySQL的表(table),文档(document) 类似于MySQL的行(row)。

插入文档

在MongoDB中,我们使用 db.collection.insert() 方法向集合里面添加新文档。

插入一个文档

db.test.insert({'name':'lianggzone','age':25})

类似MySQL

insert into test('name','age') values('lianggzone',25)

友情提示

  • 如何查看: db.test.find()
  • 如果客户端新增文档,没有包含“_id”字段,MongoDB会自动添加一个ObjectId. 这个ObjectId是文档的唯一标识。

插入一个文档,包含_id

这种情况下,“_id”字段值即我们指定值。

db.test.insert({'_id':1,'name':'lianggzone','age':25})

插入多个文档

事实上,MongoDB是支持批量写入的,MongoDB提供一个用于执行批量写入的 Bulk() API。

db.test.insert([{'name':'liang','age':25},{'name':'gzone','age':25}])

更新文档

在MongoDB中,我们使用 db.collection.update () 方法向集合里面更新文档。

整体更新

第一个参数,用来匹配要更新的文档;第二个参数,用来指定要执行的修改操作。举个简单的例子

db.test.update({'name':'lianggzone'},{'age':20})

局部更新

有时候我们仅仅需要更新一个字段,而不是整体更新,Mongodb中已经给我们提供了两个$inc和 $set。

db.test.update({'name':'lianggzone'},{$inc:{'age':3}})

类似MySQL

update test set age=age+3 where name='lianggzone'

此外,一些更新操作符,比如 $set,在字段不存在的时候将创建这个字段。

db.test.update({'name':'gg'},{$set:{'age':25}})

类似MySQL

update test set age=25 where name='gg'

可以通过指定 upsert: true 参数, update() 方法更新匹配的文档,如果没有匹配文档的情况下,它则插入一个新的使用更新条件的文档。

db.test.update({'name':'mm'},{$set:{'age':25}},true)

批量更新

在Mongodb中如果匹配多条,默认的情况下只更新第一条,那么如果我们有需求必须批量更新,那么在Mongodb中实现也是很简单,在update的第四个参数中设为true即可。

db.test.update({'name':'mm'},{$set:{'age':25}}, true, true)

查询文档

在MongoDB中,我们使用db.collection.find() 方法从集合中检索文档。

查询所有文档

使用空查询文档 ({}) 选取集合中的所有文档

db.test.find( {} )

如果不为方法 find() 指定查询文档,等同于为其指定一个空查询文档。因此如下的操作和上面的操作等效。

db.test.find()

类似MySQL

select * from test

指定等于查询条件

要指定相等查询条件,使用查询文档 { : } 查询所有包含 字段并且值等于 的集合。
下面的示例从 test集合中查询名字为liang的文档

db.test.find( { name: "liang" } )

类似MySQL

select * from test where name='liang'

查询操作符指定查询条件

在MongoDB查询中,查询文档可使用查询操作符指定查询条件。
下面的示例从 test集合中查询名字为 ‘liang’ 或 ‘gzone’ 的所有文档:

db.test.find( { name: { $in: [ 'liang', 'gzone' ] } } )

类似MySQL

select * from test where name in ('liang', 'gzone')

下面的示例从 test集合中查询年龄等于20的所有文档

db.test.find( { age: { $eq: 20 } } )

类似MySQL

select * from test where age = 20

指定 与 查询条件

复合查询可指定文档中多个字段作为查询条件。使用 AND 逻辑连接复合查询的条件子句,以筛选出集合中所有符合查询条件的文档。

在下面示例中,查询文档分别在姓名为liang 和年龄等于20的所有文档

db.test.find( { name: "liang", age: { $eq: 20 } } )

指定 或 查询条件

使用 $or 操作符,可通过 OR 逻辑连接每个子句以指定一个复合查询,查询将筛选集合中至少匹配一个查询条件的文档。

在下面示例中,查询文档分别在姓名为liang 或年龄等于20的所有文档

db.test.find( { $or: [ {name: "liang"}, {age: { $eq: 20 }} ]} )

指出查询字段

在下面示例中,查询文档指定的字段

db.test.find({ },{ name: 1, age: 1, _id: 0 })

类似MySQL

select name, age from test

使用模糊查询

在下面示例中

db.test.find( { name: /li/ } )

类似MySQL

select * from test where name like "%li%"

在下面示例中

db.test.find( { name: /^li/ } )

类似MySQL

select * from test where name like "li%"

查询中使用排序

使用sort(),可以进行排序。

在下面示例中

db.test.find( {} ).sort( { age: 1 } )

类似MySQL

select * from test order by age asc

在下面示例中

db.test.find( {} ).sort( { age: -1 } )

类似MySQL

select * from test order by age desc

查询数量

在下面示例中

db.test.count()

类似MySQL

select count(*) from test 

当然,我们还可以通过以下方式

db.test.find().count()

消除重复行

在下面示例中

db.test.distinct( "name" )

类似MySQL

select distinct(name) from test

分页查询

在下面示例中

db.test.find().skip(10).limit(20)

类似MySQL

select * from test limit 10,20

删除文档

在MongoDB里, db.collection.remove() 方法从一个集合里删除文档。你可以删除一个集合里的所有文档,删除所有符合条件的文档,或者限制操作仅仅删除一个文档。

删除所有文档

可以传递一个空的查询文档 {} 给 remove() 方法以删除一个集合里的所有文档。 remove() 方法不删除索引。

在下面示例中,从test集合里删除所有的文档

db.test.remove({})

类似MySQL

delete * from test

想要删除一个集合里的所有文档,使用 drop() 方法删除包括索引的整个集合或许是更加高效的,然后重建集合和索引。

删除匹配条件的文档

想要删除匹配删除条件的文档,可以调用有参数的 remove() 方法。

在下面示例中,从test集合里删除所有的文档

db.test.remove({ name : "liang" })

类似MySQL

delete from test where name = ‘liang’
(完)

微信公众号

文章目录

  1. 1. 插入文档
    1. 1.1. 插入一个文档
      1. 1.1.1. 友情提示
    2. 1.2. 插入一个文档,包含_id
    3. 1.3. 插入多个文档
  2. 2. 更新文档
    1. 2.1. 整体更新
    2. 2.2. 局部更新
    3. 2.3. 批量更新
  3. 3. 查询文档
    1. 3.1. 查询所有文档
    2. 3.2. 指定等于查询条件
    3. 3.3. 查询操作符指定查询条件
    4. 3.4. 指定 与 查询条件
    5. 3.5. 指定 或 查询条件
    6. 3.6. 指出查询字段
    7. 3.7. 使用模糊查询
    8. 3.8. 查询中使用排序
    9. 3.9. 查询数量
    10. 3.10. 消除重复行
    11. 3.11. 分页查询
  4. 4. 删除文档
    1. 4.1. 删除所有文档
    2. 4.2. 删除匹配条件的文档