MongoDB中对文档的增删查改基本操作方法总结
插入文档:insert() 方法
要插入数据到 mongodb 集合,需要使用 mongodb 的 insert() 或 save() 方法。
语法:
insert() 命令的基本语法如下:
>db.collection_name.insert(document)
例子:
>db.mycol.insert({ _id: objectid(7df78ad8902c), title: 'mongodb overview', description: 'mongodb is no sql database', by: 'tutorials point', url: '//www.jb51.net', tags: ['mongodb', 'database', 'nosql'], likes: 100 })
这里 mycol 是集合的名称,如前面的教程中创建。如果集合在数据库中不存在,那么mongodb 将创建此集合,然后把它插入文档。
插入文档中,如果我们不指定_id参数,然后mongodb 本文档分配一个独特的objectid。
_id 是12个字节的十六进制数,唯一一个集合中的每个文档。 12个字节被划分如下:
_id: objectid(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
要插入单个查询的多个文档,可以传递一个数组 insert() 命令的文件。
示例:
>db.post.insert([ { title: 'mongodb overview', description: 'mongodb is no sql database', by: 'tutorials point', url: '//www.jb51.net', tags: ['mongodb', 'database', 'nosql'], likes: 100 }, { title: 'nosql database', description: 'nosql database doesn't have tables', by: 'tutorials point', url: '//www.jb51.net', tags: ['mongodb', 'database', 'nosql'], likes: 20, comments: [ { user:'user1', message: 'my first comment', datecreated: new date(2013,11,10,2,35), like: 0 } ] } ])
要插入文件,也可以使用 db.post.save(document)。 如果不指定_id在文档中,然后将其 save() 方法和 insert()方法工作一样。如果指定_id,它会替换整个数据文件,其中包含_id 指定save()方法。
删除文档:remove() 方法
mongodb的 remove() 方法用于从集合中删除文档。remove() 方法接受两个参数。第一个是删除criteria ,第二是justone标志:
(1)deletion criteria :(可选)删除标准,根据文件将被删除。
(2)justone : (可选)如果设置为true或1,然后只删除一个文件。
语法:
基本语法remove()方法如下
>db.collection_name.remove(delletion_critteria)
例子:
考虑以下数据mycol集合。
{ "_id" : objectid(5983548781331adf45ec5), "title":"mongodb overview"} { "_id" : objectid(5983548781331adf45ec6), "title":"nosql overview"} { "_id" : objectid(5983548781331adf45ec7), "title":"yiibai overview"}
下面的例子将删除所有的文件,其标题是 'mongodb overview'
>db.mycol.remove({'title':'mongodb overview'}) >db.mycol.find() { "_id" : objectid(5983548781331adf45ec6), "title":"nosql overview"} { "_id" : objectid(5983548781331adf45ec7), "title":"yiibai overview"} >
删除只有一个。
如果有多个记录且要删除的只有第一条记录,那么设置remove()方法中justone参数
>db.collection_name.remove(deletion_criteria,1)
删除所有文件:
如果不指定删除条件,然后mongodb将从集合中删除整个文件。这相当于sql的truncate命令。
>db.mycol.remove() >db.mycol.find() >
查询文档:
1.find() 方法
要从mongodb 查询集合数据,需要使用mongodb 的 find() 方法。
语法:
基本的find()方法语法如下
>db.collection_name.find()
find() 方法将在非结构化的方式显示所有的文件。
2.pretty() 方法
结果显示在一个格式化的方式,可以使用 pretty() 方法.
语法:
>db.mycol.find().pretty()
例子:
>db.mycol.find().pretty() { "_id": objectid(7df78ad8902c), "title": "mongodb overview", "description": "mongodb is no sql database", "by": "tutorials point", "url": "//www.jb51.net", "tags": ["mongodb", "database", "nosql"], "likes": "100" } >
除了find() 方法外,还有一个 findone() 法,返回一个文件。
rdbms where子句和mongodb等同语句.
要查询文件的一些条件的基础上,可以使用下面的操作
操作 | 语法 | 例子 | rdbms 等同 |
---|---|---|---|
equality | key | db.mycol.find({"by":"tutorials point"}).pretty() | where by = 'tutorials point' |
less than | {<key>:{$lt:<value>}} | db.mycol.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
less than equals | {<key>:{$lte:<value>}} | db.mycol.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
greater than | {<key>:{$gt:<value>}} | db.mycol.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
greater than equals | {<key>:{$gte:<value>}} | db.mycol.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
not equals | {<key>:{$ne:<value>}} | db.mycol.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
3.and 在mongodb中用法
语法:
在 find() 方法,如果通过多个键分离',',那么 mongodb 处理 and 条件。and 基本语法如下所示:
>db.mycol.find({key1:value1, key2:value2}).pretty()
例子
下面给出的例子将显示所有的教程,标题是“mongodb overview“
>db.mycol.find({"by":"tutorials point","title": "mongodb overview"}).pretty() { "_id": objectid(7df78ad8902c), "title": "mongodb overview", "description": "mongodb is no sql database", "by": "yiibai", "url": "//www.jb51.net", "tags": ["mongodb", "database", "nosql"], "likes": "100" } >
对于上面给出的例子相当于where子句 ' where by='yiibai' and title='mongodb overview' , 可以通过任意数量的键值对在 find 子句。
4.mongodb中or
语法:
or条件的基础上要查询文件,需要使用$or关键字。or 基本语法如下所示:
>db.mycol.find( { $or: [ {key1: value1}, {key2:value2} ] } ).pretty()
例子
下面给出的例子将显示所有的教程,由'yiibai' 所写或标题是“mongodb overview '
>db.mycol.find({$or:[{"by":"yiibai"},{"title": "mongodb overview"}]}).pretty() { "_id": objectid(7df78ad8902c), "title": "mongodb overview", "description": "mongodb is no sql database", "by": "yiibai", "url": "//www.jb51.net", "tags": ["mongodb", "database", "nosql"], "likes": "100" } >
5.and 和 or 一起使用
例子
下面给出的例子将显示有像的文件大于100,其标题是“mongodb overview'或者是'yiibai' 。等效于 sql where子句 为
'where likes>10 and (by = 'yiibai' or title = 'mongodb overview')'
>db.mycol.find("likes": {$gt:10}, $or: [{"by": "yiibai"}, {"title": "mongodb overview"}] }).pretty() { "_id": objectid(7df78ad8902c), "title": "mongodb overview", "description": "mongodb is no sql database", "by": "yiibai", "url": "//www.jb51.net", "tags": ["mongodb", "database", "nosql"], "likes": "100" } >
更新文档
mongodb的 update() 和 save() 方法用于更新文档的集合。 update()方法更新现有的文档值,而替换现有的文档通过的文件中 save() 方法。
1.mongodb update() 方法
update()方法更新现有文档值。
语法:
update() 方法的基本语法如下
>db.collection_name.update(selectioin_criteria, updated_data)
例子
考虑以下数据mycol集合。
{ "_id" : objectid(5983548781331adf45ec5), "title":"mongodb overview"} { "_id" : objectid(5983548781331adf45ec6), "title":"nosql overview"} { "_id" : objectid(5983548781331adf45ec7), "title":"tutorials point overview"}
下面的例子将设置新标题'mongodb overview'的文件,更新其标题是“new mongodb tutorial”
>db.mycol.update({'title':'mongodb overview'},{$set:{'title':'new mongodb tutorial'}}) >db.mycol.find() { "_id" : objectid(5983548781331adf45ec5), "title":"new mongodb tutorial"} { "_id" : objectid(5983548781331adf45ec6), "title":"nosql overview"} { "_id" : objectid(5983548781331adf45ec7), "title":"yiibai overview"} >
mongodb默认将只更新单一的文件,来更新多个你需要设置参数置'multi' 为true
>db.mycol.update({'title':'mongodb overview'},{$set:{'title':'new mongodb tutorial'}},{multi:true})
2.mongodb save() 方法
save() 方法替换现有的文档和通过新的文档 save() 方法
语法
mongodb 的 save() 方法的基本语法如下:
>db.collection_name.save({_id:objectid(),new_data})
例子
下面的例子将取代文件具有_id为 '5983548781331adf45ec7'
>db.mycol.save( { "_id" : objectid(5983548781331adf45ec7), "title":"yiibai new topic", "by":"yiibai" } ) >db.mycol.find() { "_id" : objectid(5983548781331adf45ec5), "title":"yiibai new topic", "by":"yiibai"} { "_id" : objectid(5983548781331adf45ec6), "title":"nosql overview"} { "_id" : objectid(5983548781331adf45ec7), "title":"yiibai overview"} >