走进MongoDB(二)基本操作

2016-11-08 - 1,375 Views - 0 Goods - Nothing

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

插入文档

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

插入一个文档


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

类似MySQL


insert into test('name','age') values('songliguo.com',25)

友情提示

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

插入一个文档,包含_id

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


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

插入多个文档

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


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

更新文档

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

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


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

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


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

类似MySQL


update test set age=age+3 where name='ssongliguo.com'

此外,一些更新操作符,比如 $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集合中查询名字为song的文档


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

类似MySQL


select * from test where name='song'

查询操作符指定查询条件

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


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

类似MySQL


select * from test where name in ('song', 'liguo')

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


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

类似MySQL


select * from test where age = 20

指定 与 查询条件

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

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


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

指定 或 查询条件

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

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


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

指出查询字段

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


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

类似MySQL

select name, age from test

使用模糊查询

在下面示例中


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

类似MySQL


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

在下面示例中


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

类似MySQL


select * from test where name like "so%"

查询中使用排序

使用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 : "song" })

类似MySQL


delete from test where name = ‘song’
转载请注明原文链接:首页 -> 技术交流 -> 走进MongoDB(二)基本操作
  • 支付宝打赏
  • 微信打赏

China.BeiJing

如果说人生是自我编写的程序,那么青春就是其中意味深长的代码