mongodb: insert remove

本文主要是对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()
   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值