本文主要是对mongodb中对文档、集合的删除更新等操作。参考《MongoDB权威指南》
1、插入
插入一条记录
> db.users.insert({"name":"robin","age":28})
> db.users.find()
{ "_id" : ObjectId("4f62c1b91d7e3e06f0c896cf"), "name" : "robin", "age" : 28 }
这里插入后默认会给文档增加一个“_id”键,当然也可以指定,如
> db.users.insert({"_id":1,"name":"robin","age":28})
> db.users.findOne()
{ "_id" : 1, "name" : "robin", "age" : 28 }
上面说到批量插入,可以提高性能。当然这里说出来重点不是这个,于是我尝试了插入批量数据:
db.users.find([{"name":"robin1","age":27},{"name":"robin2","age":28},{"name":"robin3","age":29},{"name":"robin4","age":26}])
可惜并不是想要的结果:
{ "_id" : ObjectId("4f61e98d6a11c11008e76b60"), "0" : { "name" : "robin1", "age" : 27 }, "1" : { "name" : "robin2", "age" : 28 }, "2" : { "name" : "robin3", "age" : 29 }, "3" : { "name" : "robin4", "age" : 26 } }
查了官方的文档貌似shell并没有支持
http://www.mongodb.org/display/DOCS/Inserting
在pymongo中有对批量插入的支持:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pymongo import Connection
import json
import unittest
class TestInsert(unittest.TestCase):
def setUp(self):
self.connection = Connection('localhost', 27017)
self.db = self.connection['sample']
self.users = self.db.users
def testInsert(self):
user = {"name":"robin", "age":30, "address":"chengdu"}
self.users.insert(user)
data = self.users.find_one({"name":"robin"})
self.assertEqual(data['age'], 30)
self.assertEqual(data['address'], "chengdu")
def testInsertId(self):
user = {"_id":1, "name":"duuuu", "age":30, "address":"chengdu"}
self.users.insert(user)
data = self.users.find_one({"name":"duuuu"})
self.assertEqual(data['age'], 30)
self.assertEqual(data['address'], "chengdu")
self.assertEqual(data['_id'], 1)
def testBatchInsert(self):
datas = [{"_id":10, "name":"du", "age":30, "address":"chengdu"}, {"_id":11, "name":"du", "age":30, "address":"chengdu"}, {"_id":12, "name":"du", "age":30, "address":"chengdu"}]
self.users.insert(datas)
data = self.users.find({"name":"du"}).count()
self.assertEqual(data, 3)
def tearDown(self):
self.users.remove()
self.connection.close()
2、删除
db.document.remove()
db.document.remove({"query":"value"})
前者会删除所有的document,但不会删除集合本身,原有的索引也会保留。后者会根据查询条件选择删除
#删除全部document
> db.users.insert({"name":"robin","age":30})
> db.users.findOne()
{
"_id" : ObjectId("4f62d0261d7e3e06f0c896d0"),
"name" : "robin",
"age" : 30
}
> db.users.remove()
> db.users.findOne()
null
#根据条件删除
> db.users.insert({"name":"robin","age":30})
> db.users.insert({"name":"duuuu","age":30})
> db.users.insert({"name":"xxxxx","age":30})
> db.users.find()
{ "_id" : ObjectId("4f62d0501d7e3e06f0c896d1"), "name" : "robin", "age" : 30 }
{ "_id" : ObjectId("4f62d05d1d7e3e06f0c896d2"), "name" : "duuuu", "age" : 30 }
{ "_id" : ObjectId("4f62d0651d7e3e06f0c896d3"), "name" : "xxxxx", "age" : 30 }
> db.users.remove({"name":"xxxxx"})
> db.users.find()
{ "_id" : ObjectId("4f62d0501d7e3e06f0c896d1"), "name" : "robin", "age" : 30 }
{ "_id" : ObjectId("4f62d05d1d7e3e06f0c896d2"), "name" : "duuuu", "age" : 30 }
#如果数据不存在
> db.users.remove({"name":"xxxxx"})
同时,还有对document提供drop的操作
db.drop_collection("users")
这个效率快,但是会将document中的什么数据都删除
相应的,在pymongo提供了对这些shell命令的操作方法:
collection.remove()
collection.drop()