一、基礎操作1、命令mongo2、插入db.表名.insert({“屬性”:”值”})3、查找全部db.表名.find()4、根據條件查找db.表名.find({“name”:”value”})5、更新 update({查找條件},{更新後屬性值})6、刪除 remove({查找條件})7、查看1條...
一、基礎操作
1、命令mongo
2、插入db.表名.insert({“屬性”:”值”})
3、查找全部db.表名.find()
4、根據條件查找db.表名.find({“name”:”value”})
5、更新 update({查找條件},{更新後屬性值})
6、刪除 remove({查找條件})
7、查看1條記錄db.person.find().limit(1)
二、插入操作
可以用一些javascript的語法
var single = {“key”:”value”,”key”:{“key”:”value”}}
insert(single)
也可以用single.key = “value”,對single進行修改
三、查詢操作
(1)
>,<,>=,<=,!= 對應著 $gt,$lt,$gte,$lte,$ne,如find({"age":{$lte:22}})
(2)
And,Or,In,notIn 對應著 (用逗號隔開即可)、 $or、$in、$nin
如db.person.find({$or:[{"sex":"girl"},{"age":23}]})
、db.person.find({"address.province":{$in:["anhui","jiejiang"]}})、
db.person.find({"address.city":{$nin:["shenzhen","hangzhou"]}})
(3)正則
以j開頭,以1結尾的
db.person.find({"name":/^j/,"name":/1$/})
(4)
db.person.find({$where:function(){return this.age=18}})
四、更新
(1)$inc修改器
年齡在原先基礎上加12,不存在屬性值則會新建
db.person.update({"name":"while snow"},{$inc:{"age":12}})
(2)$set修改器
更新為設定的值
(3)upset操作
不存在則新建,用法只需將update的第三個參數設置為new
db.person.update({"name":"new"},{$inc:{"age":1}},true)
五、聚合、游標
sql中的聚合操作有group、count、distinct
(1)count
db.person.count({"age":16})
(2)distinct
db.person.distinct("age")
(3)group
cur為當前文檔對象,prev為上一次function的累計對象(第一次為initial中的"person":[],這裡的person就是輸出的集合名)
例1:
db.person.group({
"key":{"age":true},
"initial":{"person":[]},
"$reduce":function(cur,prev){prev.person.push(cur.name);}
})
例2:
db.person.group(
{
"key":{"age":true},
"initial":{"sex":[]},
"$reduce":function(cur,prev){prev.sex.push(cur.sex);}
}
)
過濾age大於18的,並且標明每一個集合中的人數
condition為過濾條件,finalize每組執行完後觸發這個函數達到計數的目的
> db.person.group({
… “key”:{“age”:true},
… “initial”:{“person”:[]}
… “reduce”:function(doc,out){out.person.push(doc.name);},
… “finalize”:function(out){out.count=out.person.length;},
… “condition”:{“age”:{$lt:18}}
… })
六、mapreduce
map 映射函數,對選定的key進行分組,這裡是以name來進行分組的
> var map = function(){
… emit(this.name,{count:1});
… }
map 歸約函數,對map分組後的數據進行分組簡化
> var reduce = function(key,value){
… var result = {count:0};
… for(var i = 0;i<value.length;i++){
... result.count += value[i].count;}
... return result;
... }
emit為調用的次數,result存放的集合名,input傳入的文檔數,output輸出的文檔數,reduce函數被調用的次數
> db.person.mapReduce(map,reduce,{“out”:”collection”})
{
“result” : “collection”,
“timeMillis” : 24,
“counts” : {
“input” : 6,
“emit” : 6,
“reduce” : 2,
“output” : 4
},
“ok” : 1,
}
> db.collection.find()
{ “_id” : “jack”, “value” : { “count” : 2 } }
{ “_id” : “will”, “value” : { “count” : 1 } }
{ “_id” : “jone”, “value” : { “count” : 1 } }
{ “_id” : “mike”, “value” : { “count” : 2 } }
七、游標
var list = db.person.find();
其實也就是將查詢語句賦值給變數,只要枚舉過一次,游標就會銷毀,比如輸入list或list.forEach(function(x){print(x.name);})
之後再輸入list,就不會看到有返回結果
參考
[1] 《8天學通MongoDB》 http://www.cnblogs.com/huangxincheng/archive/2012/02/18/2356595.html