1. 当执行插入的时候,使用的驱动程序会将数据转换成BSON 的形式,然后将其送入数据库,文档不超过4M
2.db.users.remove()
3.db.mailing.list.remove({"opt-out":true})
for i in range(1000000):
collection.insert({"foo":"bar", "baz":i, "z": 10 -i})
import time
from pymongo import Connection
db = Connection.foo
collection = db.bar
start = time.time()
collection.remove()
collection.find_one()
total = time.time() - start
print "%d seconds" % total
46.08s
db.drop_collection("bar")
==> remove 以及 find_one 0.01
不能有任何限制条件,索引也没有了
2. 更新
var joe = db.users.findOne({"name": "joe"});
joe.relationships = {};
joe.username = joe.name
delete joe.friends
delete joe.enemies;
delete joe.name
db.users.update({"name":"joe"}, joe);
db.users.update 更新数据不为一条时会出错 duplicate
3.修改器
db.analytics.update({"url" : "www.example.com"},
{"$inc" : {"pageviews" : 1}})
db.analytics.find()
a.$inc 修改值 若不存在则创建
b.$set 增加字段修改字段
db.users.update({"_id":ObjectId("sdfsd")},
{"$set": {"favorite book" : "war and peace"}})
{"$set" : {"key" : ["",""]}}
$unset 删除键值
做更新最好用$开头的修饰修改
c. 数组修改器
$push 向已有数组末尾添加一个元素
若没有该元素则创建
如果一个值不存在就加进去,
$ne
db.papers.update({"authors cited": {"$ne": "Richie"}},
{$push : {"authors cited" : "Richie"}})
$addToSet 可以达到 $ne功能
$addToSet 与$each合作可以一次插入多条
$pop从数组删除 key : -1 1 从头部还是尾部删除一个元素
$pull 将匹配部分删掉
comments.0 comment.$.author
upsert
db.foo.save(x)
getLastError getLastOpStatus
4.db.users.find({},{username:1});
db.users.find({"age":{"$gte":18,"$lte":30}})
start = new Date("01/01/2007")
db.users.find({"registered": {"$lt":starrt}})
$ne
db.raffle.find({"ticket_no":{"$in":[725,542,390]}})
$nin
db.raffle.find({"$or":[{"ticket_no":725},{"winner":true}]})
db.raffle.find({"$or":[{"ticket_no":{"$in":[725,542,390]},{"winner":true}]});
$not
db.users.find({"id_num":{“$mod”:[5,1]}}) id_num%5==1
db.users.find({"id_num":{"not", "{“$mod”:[5,1]}"}})
一个键可以有多个条件,但是不能有多个更新修改器
db.c.find({"z":{"$in":[null], "$exitsts":true}})//否则当z不存在时返回所有
db.users.find({"name": /joe/i})
数组
$all
db.food.find({fruit: {$all:["apple","banana"]}})
"fruit.2" :"peach"
"fruit": {"$size":3}
"comments" : {"$slice" : 10 /-10} 前/后10条评论
$slice[23,10]
db.people.find({"name.first" : “Joe”, "name.last" : "Schmoe"})
db.blog.find({"comments" : {"$elementMatch" : {"author" : "joe", "score" : {"$gte" : 5}}}})
db.foo.find({"where" : "this.x + this.y == 10"})
避免用$wheer性能下降
var cursor = db.foo.find().sort({"x":1}).limit(1).skip(10);
cursor.hasNext()开始执行
db.stock.find({"desc" : "mp3"}).limit(50).sort({"price":-1});
db.stock.find({"desc":"mp3"}).limit(50).skip(50).sort({"price":-1});
略过过多的结果会导致性能问题
利用最后一个文档的排序字段作为查询条件获取下一页
var page1 = db.foo.find().sort({"date":-1})。limit(100)
var latest = null;
while (page1.hasNext()) {
latest = page1.next();
}
var page2 = db.foo.find({"date" : {"$gt" : lastest.date}});
page2.sort({"date" : -1}).limit(100);
$maxscan min max hint explain snapshot