mongo权威指南-curd

创建、更新和删除文档

插入并保存文档insert

插入数据时,mongodb会对数据进行基本的检查,如果没有_id字段自动增加一个。所有的文档必须小于16M(可以设定)

> db.stu.insert({sn:"001",name:"xiaoming"});
WriteResult({ "nInserted" : 1 })
> db.stu.find();
{ "_id" : ObjectId("58a852e4dd917e60d8c0af7d"), "sn" : "001", "name" : "xiaoming" }

注意:mongodb只进行基本的检查,所以插入非法数据很容易,所以,应该只允许信任的源连接数据库。

可以自动指定ID

db.stu.insert({"_id":2"sn":"name","name":"xiongang"});
> db.stu.insert([{"name":"lin"},{"age":89}]);
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 2,
    "nUpserted" : 0,
    "nMatched" : 0,
    "nModified" : 0,
    "nRemoved" : 0,
    "upserted" : [ ]
})
> db.stu.find();
{ "_id" : ObjectId("58a852e4dd917e60d8c0af7d"), "sn" : "001", "name" : "xiaoming" }
{ "_id" : 0 }
{ "_id" : 2 }
{ "_id" : ObjectId("58a8541bdd917e60d8c0af7e"), "name" : "lin" }
{ "_id" : ObjectId("58a8541bdd917e60d8c0af7f"), "age" : 89 }
> 
删除文档remove

remove(查询文档的可选参数,选项),选项是true表示删除一行,false表示删除所有匹配条件

不加条件会报错
> db.stu.remove();
2017-02-18T06:05:31.124-0800 E QUERY    [thread1] Error: remove needs a query :

删除文档会很快,如果是清空整个集合,使用drop删除集合会更快;

> db.stu.remove({"_id":0});
WriteResult({ "nRemoved" : 1 })
> db.stu.find();
{ "_id" : ObjectId("58a852e4dd917e60d8c0af7d"), "sn" : "001", "name" : "xiaoming" }
{ "_id" : 2 }
{ "_id" : ObjectId("58a8541bdd917e60d8c0af7e"), "name" : "lin" }
{ "_id" : ObjectId("58a8541bdd917e60d8c0af7f"), "age" : 89 }
>

如果某个数据库上没有了表那么它这个数据库也会自动删除,mongodb数据库是基于表的。

> db.stu.drop();
true
> show dbs;
admin  0.000GB
local  0.000GB
更新文档update

update(查询文档,修改器文档)

查询到某个匹配数据行,然后进行行更新

更新操作是不可分割的,若是两个更新同时发生,先到达服务器的先执行,接着执行另外一个。

> db.stu.findOne()
{
    "_id" : ObjectId("58a852e4dd917e60d8c0af7d"),
    "sn" : "001",
    "name" : "xiaoming"
}
> db.stu.update({"sn":"001"}, {"name":"linjunbin",age:"30"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.stu.findOne();
{
    "_id" : ObjectId("58a852e4dd917e60d8c0af7d"),
    "name" : "linjunbin",
    "age" : "30"
}
>

mongodb会查出当前一个匹配的文档,进行更新,没办法把所有的条件进行匹配更新。

默认:mongodb更新默认只更新一行,如果要更新多行需要使用Multi。

> db.person.find();
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "lin" }
{ "_id" : ObjectId("58ea1b4b5d2339dfb50aa5ad"), "name" : "lin" }
{ "_id" : ObjectId("58ea1b545d2339dfb50aa5ae"), "name" : "lin" }
> db.person.update({name:'lin'},{name:'linjunbin',age:20});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find()
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 20 }
{ "_id" : ObjectId("58ea1b4b5d2339dfb50aa5ad"), "name" : "lin" }
{ "_id" : ObjectId("58ea1b545d2339dfb50aa5ae"), "name" : "lin" }

multi:true表示修改多行

> db.person.update({name:'lin'},{"$set":{sex:'gener'}},{multi:true});
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
> db.person.find({name:'lin'});
{ "_id" : ObjectId("58ea1b4b5d2339dfb50aa5ad"), "age" : 30, "name" : "lin", "sex" : "gener" }
{ "_id" : ObjectId("58ea1b545d2339dfb50aa5ae"), "name" : "lin", "sex" : "gener" }
使用修改器

$inc:新增数据,该键不存在就创建。整型、长整型、双精度浮点型。

> db.person.update({name:'linjunbin'},{"$inc":{"age":99}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find({name:'linjunbin'});
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 119 }

> db.person.update({name:'linjunbin'},{"$inc":{"age":9.9}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find({name:'linjunbin'});
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 128.9 }

$set:指定一个字段的值,如果字段不存在就创建它。可以修改内嵌文档。

> db.person.update({name:'lin'},{"$set":{"age":30}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find();
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 20 }
{ "_id" : ObjectId("58ea1b4b5d2339dfb50aa5ad"), "name" : "lin", "age" : 30 }

$unset:删除某个指定的字段;

> db.person.update({name:'lin'},{"$unset":{name:1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find()
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 20 }
{ "_id" : ObjectId("58ea1b4b5d2339dfb50aa5ad"), "age" : 30 }
{ "_id" : ObjectId("58ea1b545d2339dfb50aa5ae"), "name" : "lin" }

$rename表示重命名。

> db.person.update({age:30},{"$rename":{name:'rename'}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find({age:30});
{ "_id" : ObjectId("58ea1b4b5d2339dfb50aa5ad"), "age" : 30, "sex" : "gener", "rename" : "lin" }

option的作用:{upsert:true},表示如果有查找到数据就匹配修改,如果没有就直接创建。

> db.person.update({age:40},{name:'lin',sex:'gener'},{upsert:true});
WriteResult({
    "nMatched" : 0,
    "nUpserted" : 1,
    "nModified" : 0,
    "_id" : ObjectId("58ea2143934566b39ed6a808")
})
数组修改器

$push:向已经有的数组末尾加入一个元素。如果没有就创建一个新的数组。

> db.person.update({name:"lin"},{"$push":{"comments":{title:"this is title",age:30}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find({name:'lin'});
{ "_id" : ObjectId("58ea1b545d2339dfb50aa5ae"), "name" : "lin", "sex" : "gener", "comments" : [ { "title" : "text", "com" : "tt" }, { "title" : "txt", "com" : "txdd" }, { "title" : "this is title", "age" : 30 } ] }
{ "_id" : ObjectId("58ea2143934566b39ed6a808"), "name" : "lin", "sex" : "gener", "comments" : [ { "title" : "text", "com" : "tt" }, { "title" : "txt", "com" : "txdd" } ] }

each: push操作添加多个值。

> db.person.find({name:'linjunbin'});
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 128.9, "hourly" : [ "football", "basketball" ] }
> db.person.update({name:'linjunbin'},{"$push":{hourly:{"$each":['football2','basketball2']}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.person.find({name:'linjunbin'});
{ "_id" : ObjectId("58ea1b275d2339dfb50aa5ac"), "name" : "linjunbin", "age" : 128.9, "hourly" : [ "football", "basketball", "football2", "basketball2" ] }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值