您的位置:首页 > 数据库 > Mongodb

MongoDB(一)

2015-12-31 13:42 531 查看

问题解决

1、由于目标计算机积极拒绝 无法连接

原因:还没有启动mongodb,就使用mongo命令

解决方法:在bin目录下输入

mongod --dbpath XXXX/data 然后在输入 mongo

一、基础操作

每条对特定表的操作都需要以 db.表名 开头,如插入操作 db.person.insert({"属性":"值"}),下面省略 db.表名

1、打开mongo shelll命令

mongo  


2、插入记录

insert({“属性”:”值”})


3、查找全部记录/一条记录

find()

find().limit(1)


4、根据条件查找记录

find({“name”:”value”})


5、更新记录

update({查找条件},{更新后属性值})  


6、删除记录

remove({查找条件})


对整个mongo数据库进行操作,以下不需要加db.表名

7、查询目前存在的所有数据库

show dbs;


8、切换数据库(和mysql中方法相同)

use 数据库名;


  

二、插入操作

可以用一些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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: