MongoDB学习笔记(四)
现在这节就主要讨论插入,更新和删除文档。
插入:MongoDB学习笔记(一)中有讲 这里就简单复习一下
首先声明MongoDB中保存的是BSON (不是JSON)
db.collection_name.insert()
例
--------------------------------------------------
?
> data = { name:'hurry',title:'software developer',skills:['java','js']} ? ??
{
"name" : "hurry",
"title" : "software developer",
"skills" : [
"java",
"js"
]
}
> db.members.insert(data);
> db.members.findOne(); ??
{
"_id" : ObjectId("4e11a4f6c25a7683c014d968"),
"name" : "hurry",
"title" : "software developer",
"skills" : [
"java",
"js"
]
}
--------------------------------------------------
insert和save方法的区别
insert 不校验数据是否存在,直接插入,如果重复的话,报错.
save 插入重复数据,则改用update
例
---------------------------------------------------
?
> db.members.insert ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
function (obj, _allow_dot) {
? ? if (!obj) {
? ? ? ? throw "no object passed to insert!";
? ? }
? ? if (!_allow_dot) {
? ? ? ? this._validateForStorage(obj);
? ? }
? ? if (typeof obj._id == "undefined") {
? ? ? ? var tmp = obj;
? ? ? ? obj = {_id:new ObjectId};
? ? ? ? for (var key in tmp) {
? ? ? ? ? ? obj[key] = tmp[key];
? ? ? ? }
? ? }
? ? this._mongo.insert(this._fullName, obj);
? ? this._lastID = obj._id;
}
> db.members.save ?
function (obj) {
? ? if (obj == null || typeof obj == "undefined") {
? ? ? ? throw "can't save a null";
? ? }
? ? if (typeof obj._id == "undefined") {
? ? ? ? obj._id = new ObjectId;
? ? ? ? return this.insert(obj);
? ? } else {
? ? ? ? return this.update({_id:obj._id}, obj, true);
? ? }
}
> db.members.find(); ??{ "_id" : ObjectId("4e11a4f6c25a7683c014d968"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ] }{ "_id" : ObjectId("4e11adf4c25a7683c014d969"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ] }> data._id = ObjectId("4e11a4f6c25a7683c014d968")ObjectId("4e11a4f6c25a7683c014d968")> db.members.insert(data) ? ? ? ? ? ? ? ? ? ? ? ?E11000 duplicate key error index: test.members.$_id_ ?dup key: { : ObjectId('4e11a4f6c25a7683c014d968') }> db.members.save(data) ??
---------------------------------------------------
删除:MongoDB学习笔记(一)中有讲 这里就简单复习一下
remove 方法 删除文档 ?function (t, justOne)?
参数1 条件?参数2 删除一个?boolean
如果要删除所有数据 ?有一个简单的方法 可以直接删除相应的集合?db.collection_name.drop() 这样的速度会更快
更新:
这里主要讲一下更新方法?MongoDB学习笔记(一)中有讲过最简单的更新 这里就不提了
使用修改器
$inc 增加值 (可以增加负数)只用于数字类型
-------------------------------------------------
?
> db.members.find() ? ? ?
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ], "age" : 25 }
> db.members.update({'name':'hurry'},{'$inc':{'age':1}})
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ],"age" : 26 }
?
-------------------------------------------------
$set 如果该键不存在,则增加它(使用$unset删除不想要的键)
例
-------------------------------------------------
?
> db.members.update({'name':'hurry'},{'$set':{'age':22}})
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ], "age" : 22}
?
-------------------------------------------------
数组修改器 $push $pop
例
-------------------------------------------------
?
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js" ], "title" : "software developer" }
> db.members.update({'name':'hurry'},{'$push':{'skills':'python'}})
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js", "python" ], "title" : "software developer" }
> db.members.update({'name':'hurry'},{'$pop':{'skills':1}}) ? ? ? ?
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js" ], "title" : "software developer" }
?
-------------------------------------------------
$addToSet 避免重复插入
例
-------------------------------------------------
?
> db.members.update({'name':'hurry'},{'$addToSet':{'skills':'python'}})
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js", "python" ], "title" : "software developer" }
?
-------------------------------------------------
$each一次添加多个
例
--------------------------------------------------
?
> db.members.update({'name':'hurry'},{'$addToSet':{'skills':{$each:['python','mongoDB','PL/SQL']}}})
> db.members.find() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js", "python", "PL/SQL", "mongoDB" ], "title" : "software developer" }
----------------------------------------------------
?
更新多个文档(熟悉update方法的用法) 参见MongoDB学习笔记(一)中的参考资料