第7周 Mongodb的部署,数据操作

基本增删改查:

#添加文档
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 }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值