MongoDB CRUD(insert、update、remove、find)

1,insert

创建document(文档) 并添加记录

       db.collection.insert({"name":"张三"})

插入指定document的数据

       db.collection.insert({"name":"李四"})

2,update   更新指定document的数据符合条件的数据

       语法: db.collection.update(query,update_expression,bool_upsert,bool_multi);

       bool_upsert:1表示query不存在时候就插入,0表示query不存在时不做任何操作。

       bool_multi:1表示更新所有符合条件的(等价于{multi:true}),0表示只更新一条符合条件的记录,默认值是0(只修改一条符合条件的记录)。

       db.collection.update({"name":"李四"},{"name":"李四五"})   更新一条符合条件的记录删除指定文档中的指定数据,且只保留name属性,其它属性将会被全部删除。强硬式文档更新。

       $set 设置属性(修改指定列的值)

       db.collection.update({"name":"李四"},{$set:{"name":"李四五"}})   更新一条符合条件的记录(当表中没有“name”为“李四”的用户的时候将没有影响数据库)

       db.collection.update({"name":"李四"},{$set:{"name":"李四五六"}},{multi:true})  更新所有符合条件的记录

       db.collection.update({"name":"李四"},{$set:{"name":"李四五"}},{upsert:true})  如果有“name”为“李四”的用户将更新一条记录,如果没有符合条件的更新则插入一条记录。

      $setOnInsert   upsert 为true 的更新操作导致插入文档时,设置指定字段的值,如果更新不导致插入时$ setOnInsert什么也不做。

     db.collection.update({'name':'黎明'},{$set:{"name":'四大天王黎明'},$setOnInsert:{'loc':'香港'}},{upsert:true}) 

    

      $unset删除属性(删除指定列)

         db.collection.update({"name":"李四"},{$unset:{"age":1},0,1})  删除所有符合条件记录的age属性。

      $inc  修改器 (类似编程语言中的+=)

       语法:{ $inc: { <field1>: <amount1>, <field2>: <amount2>, ... } }

        db.collection.update({"name" : "李四"},{$inc:{age:10}})   将李四的年龄增加10岁

       db.collection.update({"name" : "李四"},{$inc:{age:-10}})   将李四的年龄减少10岁

     $rename 更新字段名

      db.user.update({"name" : "李四"},{$rename:{age:'年龄'}})  将李四的“age”属性名称改为“年龄”

3,remove 

       删除指定文档中的指定数据

      语法:db.collection.remove(查询表达式,选项);

      选项 justOne:true/false  是否只删一行,默认是false

      eg:

      db.collection.remove({"age":20});//删除所有年龄为20的 等价于db.collection.remove({"age":20},false);

      db.collection.remove({"age":20},1);  或 db.collection.remove({"age":20},true); //只删除一个年龄为20的

       db.collection.remove({})

       注意:在3.2之后的版本删除语法调整为deleteOne   或者 deleteMany了

4,find   查询指定document的数据

       语法: db.collection.find(查询表达式,查询的列)

       db.collection.find({查询条件})   查询出所有符合条件的数据

       db.collection.findOne({查询条件}) 查询一条符合条件的数据

       db.collection.find({"name":{$regex: '西', $options:'i'}})    模糊查询name中包含西的所有记录

       db.collection.find({"name":{$regex:/西.*/i}})                    模糊查询name中包含西的所有记录

       db.collection.find({"name":/西/i})    模糊查询name中包含西的所有记录

以上三种模糊查询有什么区别呢? 他们各有什么优劣?各自的适用场景是什么?模糊查询不能用索引怎么提高查询效率呢?20160417。

      $options:'i'  表示的是大小写敏感,

查询表达式

$elemMatch用法:
{"contents":{$elemMatch:{"fieldId":"project_type","content":"民间文学"}}}

逻辑运算符begin
$and的用法:  逻辑与

语法: { $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
{ "$and" : [{"contents":{$elemMatch:{"fieldId":"project_type","content":"民间文学"}}},{"contents":{$elemMatch:{"fieldId":"batch","content":"2"}}}]}

and 满足[]里面的所有{}条件的

$or的用法:  逻辑或    满足[]里面的其中条件之一的

语法: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
{ "$or" : [{"contents":{$elemMatch:{"fieldId":"project_type","content":"民间文学"}}},{"contents":{$elemMatch:{"fieldId":"batch","content":"2"}}}]}

 

$not的用法:逻辑非

语法: { field: { $not: { <operator-expression> } } }

db.user.find({age:{$not:{$gt:20}}});   查询不是年龄大于20的记录

注意这里和  age:{$lte:20} 不等价  这里可以查询出没有age属性的值,但是 age:{$lte:20}只能查age属性存在,且小于等于20的记录

$nor的用法:所有条件全部不成立

 语法:{ $nor: [ { <expression1> }, { <expression2> }, ...  { <expressionN> } ] }

db.user.find({$nor:[{'name':'zhangsan'},{age:{$gt:20}}]});   查询名字不等于“zhangsan” 并且age不是>20的记录

nor 不满足[]里面的其中任意一个{}条件的

 

 逻辑运算符end

 

比较运算符begin

 $in的用法:满足条件之一

{"provinceId":{$in:["53dc4e954bbaa3e56e7672f0", "53dc4e954bbaa3e56e7672ba"]}}

in表示满足里面的条件之一 53dc4e954bbaa3e56e7672f0 或 53dc4e954bbaa3e56e7672ba即可

注意:如果[]里面没有元素,将查询不出来符合条件的数据。

$nin的用法    不满足条件之一

{"provinceId":{$nin:["53dc4e954bbaa3e56e7672f0", "53dc4e954bbaa3e56e7672ba"]}}

nin表示不满足里面的条件之一 53dc4e954bbaa3e56e7672f0 或 53dc4e954bbaa3e56e7672ba 才行

$all的用法: 满足所有条件

{"path":{$all:["53a39830b21cdd81140b0a00", "53a398b1b21cdd81140b0a03"]}}

all表示全部满足里面的所有条件["53a39830b21cdd81140b0a00", "53a398b1b21cdd81140b0a03"]

$ne的用法:  不等于

{"name":{$ne:"张三"}}   姓名不等于张三的用户

$gt的用法 :大于

db.user.find({age:{$gt:20}});    查询年龄大于20的用户

$lt的用法 :小于

$gte 的用法 :大于等于

$lte的用法 :小于等于

 比较运算符end

元素运算符begin

 $exists的用法:存在

语法: { field: { $exists: <boolean> } }    查询指定属性是否存在  true表示存在,false表示不存在

db.user.find({age:{$exists:false}});   查询age属性存在的记录

db.user.find({age:{$exists:false}});   查询age属性不存在的记录

$mod的用法:求余取模

语法:{ field: { $mod: [ divisor, remainder ] } }   divisor 除数   余数divisor

db.user.find({age:{$mod:[10,0]}});  查询年龄除以10余数是0的记录

$type的用法: 根据类型查询

语法:{field:{ $type: <BSON type number> | <String alias> } }

db.user.find({age:{$type:1}}); "double" 查询age的类型是double的记录

db.user.find({age:{$type:2}}); "string" 查询age的类型是string的记录

元素运算符end

js运算符begin

$where用法:js表达式为正则为真

注意:where 把二进制数据转换成json数据之后再做的查询,这样运行的效率比较低下,一般不推荐使用

db.user.find({$where:'this.age>20&&this.age<25||this.age>80&&this.age<90'});

$regex用法:正则表达式查询

语法:

{ <field>: { $regex: /pattern/, $options: '<options>' } }

{ <field>: { $regex: 'pattern', $options: '<options>' } }

{ <field>: { $regex: /pattern/<options> } }

db.user.find({"name":{$regex:/^san.*/i}})  查询以"san"开头的记录

db.user.find({"name":{$regex:/san.*/i}})   查询包含"san"开头的记录

注意:正则表达式的效率也很低下,能不用尽量不要用

js运算符end

 

 

 

空间定位与距离检索

http://blog.csdn.net/flamingsky007/article/details/39208837



 

猜你喜欢

转载自wangshirufeng.iteye.com/blog/2265591