基本增删改查:
#添加文档
db.foo.insert({"bar":"baz"});
db.foo.insert({"name":"ing"});
#查询文档
db.foo.find();
#删除全部文档(清空集合)
db.foo.remove();
#删除指定记录
db.foo.remove({"bar":"baz"});
替换文档
> db.foo.remove();
> db.foo.insert({"name":"test1","age":20});
> db.foo.find();
{ "_id" : ObjectId("52b8430e530e91d520f148a2"), "name" : "test1", "age" : 20 }
> db.foo.update({"name":"test1"},{"age":30}); #把name为test1的文档替换为后面的文档
> db.foo.find();
{ "_id" : ObjectId("52b8430e530e91d520f148a2"), "age" : 30 }
update有2个可选的bool参数,第1个表示是否开启upsert模式(文档存在时更新,不存在时自动创建);第2个表示是否开启多multi模式(默认情况下update操作只会更新第一个匹配到的文档,如果开启multi模式,则会更新所有匹配到的文档)。
// 更新:指定第三个参数为true可以开启upsert模式
db.users.update({ "name" : "joe" }, joe, true);
在upsert模式下,如果找到匹配的记录则更新之,否则如果找不到匹配记录就会创建一条新的记录。
// 更新:指定第四个参数为true可以开启multi模式
db.users.update({ "name" : "joe" }, joe, true, true);
默认情况下update只会更新第一个匹配到的文档,开启multi模式,才会更新所有匹配到的文档。
注意:MongoDB的update操作是替换整个文档的,而不是对文档做出局部修改。如果要单独修改一个或多个键或值,请使用修改器。
修改器:
修改器 | 说明 | 备注 |
$inc | 增加或减少数字的值,键不存在时会自动创建 | 数字 |
$set | 设置指定键的值,键不存在时会自动创建 |
|
$unset | $set的反操作,会删除键及键值 |
|
$push | 将元素追加到数组末尾,数组不存在会自动创建 | 数组 |
$pushAll | $push的批量操作版本 | 数组 |
$addToSet | 同$pushAll,但会自动过滤重复元素 | 数组 |
$pop | {$pop : {key : 1}}——从数组末尾移除元素 {$pop : {key : -1}}——从数组开头移除元素 | 数组 |
$pull | 从数组中移除所有匹配的元素 | 数组 |
$pullAll | $pull的批量操作版本 | 数组 |
$rename | 修改指定键的键名 | 键 |
$bit | 对整形键值执行位操作“与”、“或”等 | 数字 |
> db.hits.insert({"url":"www.datagru.cn","pv":102});
> db.hits.insert({"url":"f.datagru.cn","pv":108});
> db.hits.insert({"url":"www.itpub.net","pv":155});
> db.hits.find(); #例子
{ "_id" : ObjectId("52b883e3241fd4de8df28b1c"), "url" : "www.datagru.cn", "pv" : 102 }
{ "_id" : ObjectId("52b883e9241fd4de8df28b1d"), "url" : "f.datagru.cn", "pv" : 108 }
{ "_id" : ObjectId("52b883ef241fd4de8df28b1e"), "url" : "www.itpub.net", "pv" :
155 }
> db.hits.update({"url":"www.itpub.net"},{"$inc":{"pv":1}}); #$inc
> db.hits.find();
{ "_id" : ObjectId("52b883e3241fd4de8df28b1c"), "url" : "www.datagru.cn", "pv" : 102 }
{ "_id" : ObjectId("52b883e9241fd4de8df28b1d"), "url" : "f.datagru.cn", "pv" : 108 }
{ "_id" : ObjectId("52b883ef241fd4de8df28b1e"), "url" : "www.itpub.net", "pv" :
156
} #这里值已经加1了
> db.hits.update({"_id" : ObjectId("52b883ef241fd4de8df28b1e")},{"$set":{"ip":20}}); #$set:增加键值
> db.hits.find();
{ "_id" : ObjectId("52b883e3241fd4de8df28b1c"), "url" : "www.datagru.cn", "pv" : 102 }
{ "_id" : ObjectId("52b883e9241fd4de8df28b1d"), "url" : "f.datagru.cn", "pv" : 108 }
{ "_id" : ObjectId("52b883ef241fd4de8df28b1e"),
"ip" : 20, "pv" : 156, "url" : "www.itpub.net" }
> db.hits.update({"_id" : ObjectId("52b883ef241fd4de8df28b1e")},{"$set":{"ip":40}}); #$set:修改键值
> db.hits.find();
{ "_id" : ObjectId("52b883e3241fd4de8df28b1c"), "url" : "www.datagru.cn", "pv" : 102 }
{ "_id" : ObjectId("52b883e9241fd4de8df28b1d"), "url" : "f.datagru.cn", "pv" : 108 }
{ "_id" : ObjectId("52b883ef241fd4de8df28b1e"),
"ip" : 40, "pv" : 156, "url" : "www.itpub.net" }
> db.hits.update({"url":"www.itpub.net"},{"$unset":{"ip":1}}); #$unset:删除键值
> db.hits.find();
{ "_id" : ObjectId("52b883e3241fd4de8df28b1c"), "url" : "www.datagru.cn", "pv" : 102 }
{ "_id" : ObjectId("52b883e9241fd4de8df28b1d"), "url" : "f.datagru.cn", "pv" : 108 }
{ "_id" : ObjectId("52b883ef241fd4de8df28b1e"), "pv" : 156, "url" : "www.itpub.net" }
#数组修改器
> db.hits.find();
{ "_id" : ObjectId("52b88777241fd4de8df28b21"), "url" : "www.itpub.net", "pv" : 155 }
> db.hits.update({"_id" :ObjectId("52b88777241fd4de8df28b21")},{"$set":{"users":[{"name":"Zhang","age":23},{"name":"Huang","age":21}]}});
> db.hits.find();
{ "_id" : ObjectId("52b88777241fd4de8df28b21"), "pv" : 155, "url" : "www.itpub.net", "users" : [ { "name" : "Zhang", "age" : 23 }, { "name" : "Huang", "age" : 21 } ] }
> db.hits.update({"_id":ObjectId("52b88777241fd4de8df28b21")},{"$push":{"users":{"name":"He","age":34}}});
##$push:为数组追加元素
> db.hits.find();
{ "_id" : ObjectId("52b88777241fd4de8df28b21"), "pv" : 155, "url" : "www.itpub.net", "users" : [ { "name" : "Zhang", "age" : 23 }, { "name" : "Huang", "age" : 21 }, { "name" : "He", "age" : 34 } ] }
> db.hits.find();
{ "_id" : ObjectId("52b88777241fd4de8df28b21"), "pv" : 155, "url" : "www.itpub.net", "users" : [ { "name" : "Zhang", "age" : 23 }, { "name" : "Huang", "age" : 21 }, { "name" : "
He", "age" : 34 } ] }
> db.hits.update({"_id":ObjectId("52b88777241fd4de8df28b21")},{"$set":{"users.2.name":"Liu"}});
##定位修改
> db.hits.find();
{ "_id" : ObjectId("52b88777241fd4de8df28b21"), "pv" : 155, "url" : "www.itpub.net", "users" : [ { "name" : "Zhang", "age" : 23 }, { "name" : "Huang", "age" : 21 }, { "age" : 34, "name" : "
Liu" } ] }
> db.hits.update({"users.name":"Liu"},{"$set":{"users.$.name":"Gong"}});
##定位操作符$
> db.hits.find();
{ "_id" : ObjectId("52b88777241fd4de8df28b21"), "pv" : 155, "url" : "www.itpub.net", "users" : [ { "name" : "Zhang", "age" : 23 }, { "name" : "Huang", "age" : 21 }, { "age" : 34, "name" : "
Gong" } ] }
#getLastError
#getlasterror命令检查本连接的上一次数据库操作的错误。
> db.hits.update({"_id":ObjectId("52b88777241fd4de8df28b21")},{"$set":{"users.2.name":"Liu"}});
> db.runCommand({getLastError:1});
{
"updatedExisting" : true,
"n" : 1,
"connectionId" : 2,
"err" : null,
"ok" : 1
}
这个命令的返回值是一个多字段的对象。常用的字段已经列在下面;这里可能还有其他字段。
- ok - 为真的话表示getLastError命令成功完成了。它并不表示上一次没有错误。
- err - 如果非空,表示有错误出现。值是一个错误正文的描述。
- code - 如果设置了,表示出现的错误码。
- connectionId - 连接的id。
- lastOp - 上一次操作的op-id
对于更新:
- n - 如果一次更新完成了,它是更新的文档个数。
Mongodb查询:find
> db.abc.insert({"a":23,"b":21,"c":34});
> db.abc.insert({"a":23,"b":32});
> db.abc.insert({"a":23,"b":24,"c":54});
> db.abc.insert({"a":23,"c":37});
> db.abc.insert({"a":31,"b":21,"c":55});
> db.abc.insert({"a":31,"b":25,});
> db.abc.insert({"a":31,"c":34});
> db.abc.find();
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "a" : 23, "b" : 21, "c" : 34 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "a" : 23, "b" : 32 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "a" : 23, "b" : 24, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b"), "a" : 23, "c" : 37 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2c"), "a" : 31, "b" : 21, "c" : 55 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2d"), "a" : 31, "b" : 25 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2e"), "a" : 31, "c" : 34 }
> db.abc.find({"a":23}); ##只查a=23的文档
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "a" : 23, "b" : 21, "c" : 34 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "a" : 23, "b" : 32 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "a" : 23, "b" : 24, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b"), "a" : 23, "c" : 37 }
> db.abc.find({"a":23},{"b":1}); ##只查a=23文档的b属性
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "b" : 21 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "b" : 32 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "b" : 24 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b") }
> db.abc.find({"a":23},{"b":1,"c":1}); ##只查a=23文档的b,c属性
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "b" : 21, "c" : 34 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "b" : 32 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "b" : 24, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b"), "c" : 37 }
> db.abc.find({"a":23},{"b":0}); ##只查a=23文档的除b以外的属性
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "a" : 23, "c" : 34 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "a" : 23 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "a" : 23, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b"), "a" : 23, "c" : 37 }
> db.abc.find({"a":23},{"b":1,"_id":0}); #只查a=23文档的b属性,不显示_id属性
{ "b" : 21 }
{ "b" : 32 }
{ "b" : 24 }
{ }
#比较查询
> db.abc.find();
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "a" : 23, "b" : 21, "c" : 34 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "a" : 23, "b" : 32 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "a" : 23, "b" : 24, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b"), "a" : 23, "c" : 37 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2c"), "a" : 31, "b" : 21, "c" : 55 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2d"), "a" : 31, "b" : 25 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2e"), "a" : 31, "c" : 34 }
> db.abc.find({},{"b":1,"c":1});
{ "_id" : ObjectId("52b89964241fd4de8df28b28"), "b" : 21, "c" : 34 }
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "b" : 32 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "b" : 24, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2b"), "c" : 37 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2c"), "b" : 21, "c" : 55 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2d"), "b" : 25 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2e"), "c" : 34 }
> db.abc.find({b:{"$gte":30,"$lt":35}}); ##b>=30 and b < 35
{ "_id" : ObjectId("52b89964241fd4de8df28b29"), "a" : 23, "b" : 32 }
> db.abc.find({b:{"$gte":30,"$lt":32}}); ##b>=30 and b < 32
> db.abc.find({b:{"$gte":30,"$ne":32}}); ##b>=30 and b<>32
> db.abc.find({b:{"$gte":24,"$ne":32}}); ##b>=24 and b<>32
{ "_id" : ObjectId("52b89964241fd4de8df28b2a"), "a" : 23, "b" : 24, "c" : 54 }
{ "_id" : ObjectId("52b89964241fd4de8df28b2d"), "a" : 31, "b" : 25 }