添加?

添加有两种方式insert()与save()

MongoDB是面向文档存储的数据库,文档结构形式叫BSON(类似JSON)

db.c1.insert({name:“user1”});
 db.c1.save({_id:1, name:“user1”});

他们两者之间的区别是:

1、使用save函数里,如果原来的对象不存在,那他们都插入数据,如果已经存在,save会调用update更新里面的记录,而insert则会忽略操作

2、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,一个个插入。具体的看一下函数的源码。

数组操作?

KaTeX parse error: Expected '}', got 'EOF' at end of input: …oo.update({},{"push":{“users”:1}})向users数组末尾添加一个1元素
 db.foo.update({},{“KaTeX parse error: Expected '}', got 'EOF' at end of input: …sh":{"users":{“each”:[1,2]}}})向users数组末尾添加多个元素,要$each 配合使用

mongodb insert 多条 mongodb insert save_键值each使用,可以添加多个不同的值,数组修改器慢,因为文档大小可能会变

$pop从头部或尾部删除元素
KaTeX parse error: Expected '}', got 'EOF' at end of input: …oo.update({},{"set”:{name:‘tes’}},false,true)

在MongoDB找下级是按点的方式:比如user下有叫logs数组,就user.logs

修改?

db.collection.update( , , , )

修改现有存在的文档或集合时使用。默认的update()方法值更新单个文档。但是如果multi参数设置为true,则更新操作可以更新全部符合条件的文档。

Query – 类型:文档;用于更新选择过滤。

Update – 类型:文档;需要更新的文档的内容。

Upsert – 类型:文档或boolean;设置为true时,当查询没有匹配到文档时进行新建。默认值为false

Multi: - 类型:文档或boolean;设置为true时,则更新满足查询条件的所有文档(多个)。设置为false时只更新单个文档。默认为false。

mongodb insert 多条 mongodb insert save_java_02


删除?

db.collection.remove(query, justOne)
 Query – 类型:文档;用于删除选择过滤。
 JustOne – 类型:boolean;当设置为true时只删除一个文档。
 db.collection.remove({});删除collection中的所有数据,一旦删除不可恢复。但是不会删除collection;
 db.collection.drop();直接删除collection;

去重?

Distinct()
 db.collection.distinct(field, query)
 Field – 类型:字符串;返回非重复的字段。
 Query – 类型:文档;查询条件。
 db.user.distinct("_id", {age: 1})

查询?

db.collection.find(, )

find()返回的是一个文档集合;

db.collection.findOne(, )

findOne()返回的是一个文档

前一个是查询条件,后一个参数是显示的数据

查询操作符(Query Operators)可以让我们写出复杂查询条件,让我们使用的过程更加灵活。
比较查询操作符
  $all
语法: { field: { $all: [ , … ] }
field:文档中键的名称(不使用双引号)。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法:{field: {gt: value} }
匹配键值大于指定值的所有文档。

KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {gte: value} }匹配键值不小于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法:{field: {lt: value} }匹配键值小于指定值的所有文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {lte: value} }匹配键值不大于指定值的所有文档。
 $in 语法: { field: { $in: [, , … ] } }匹配键值等于指定数组中任意值的文档。类似sql中in.
 $nin 语法: { field: { $nin: [ , … ]} }匹配键不存在或者键值不等于指定数组的任意值的文档。
KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法: {field: {ne: value} }匹配键值不等于指定值的文档。

逻辑查询操作符

$and 语法: { $and: [ { }, { } , … , { } ] }and指定一个至少包含两个表达式的数组,选择出满足该数组中所有表达式的文档。and操作符使用短路操作,若第一个表达式的值为“false”,余下的表达式将不会执行。

$nor语法: { KaTeX parse error: Expected 'EOF', got '}' at position 70: …pressionN> } ] }̲ nor执行逻辑NOR运算,指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。

$not语法: { field: { KaTeX parse error: Expected 'EOF', got '}' at position 32: …-expression> } }̲ }not执行逻辑NOT运算,选择出不能匹配表达式的文档 ,包括没有指定键的文档。mongodb insert 多条 mongodb insert save_数组_03regex)。

KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {gte: value} }匹配键值不小于指定值的所有文档。

KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法:{field: {lt: value} }匹配键值小于指定值的所有文档。

KaTeX parse error: Expected '}', got 'EOF' at end of input: …e 语法:{field: {lte: value} }匹配键值不大于指定值的所有文档。

$in 语法: { field: { $in: [, , … ] } }匹配键值等于指定数组中任意值的文档。类似sql中in.

$nin 语法: { field: { $nin: [ , … ]} }匹配键不存在或者键值不等于指定数组的任意值的文档。

KaTeX parse error: Expected '}', got 'EOF' at end of input: … 语法: {field: {ne: value} }匹配键值不等于指定值的文档。

逻辑查询操作符

$and 语法: { $and: [ { }, { } , … , { } ] }and指定一个至少包含两个表达式的数组,选择出满足该数组中所有表达式的文档。and操作符使用短路操作,若第一个表达式的值为“false”,余下的表达式将不会执行。

$nor语法: { KaTeX parse error: Expected 'EOF', got '}' at position 70: …pressionN> } ] }̲ nor执行逻辑NOR运算,指定一个至少包含两个表达式的数组,选择出都不满足该数组中所有表达式的文档。

$not语法: { field: { KaTeX parse error: Expected 'EOF', got '}' at position 32: …-expression> } }̲ }not执行逻辑NOT运算,选择出不能匹配表达式的文档 ,包括没有指定键的文档。mongodb insert 多条 mongodb insert save_数组_03regex)。

mongodb insert 多条 mongodb insert save_java_05


如果文档的键值是一个数组。那么$type将对数组里面的元素进行类型匹配而不是键值数组本身。

JavaScript查询操作符

$regex regex操作符查询中可以对字符串的执行正则匹配。MongoDB使用Perl兼容的正则表达式(PCRE)库来匹配正则表达式.  可以使用正则表达式对象或者regex操作符.

db.inventory.find( { name: /.4/i } );
 db.inventory.find( { name: { $regex: ‘.4’, $options: ‘i’ } } );

options(regex 提供四个选项标志)
i  如果设置了这个修饰符,模式中的字母会进行大小写不敏感匹配。
m 默认情况下,PCRE 认为目标字符串是由单行字符组成的(然而实际上它可能会包含多行).如果目标字符串 中没有 "\n"字符,或者模式中没有出现“行首”/“行末”字符,设置这个修饰符不产生任何影响。
s 如果设置了这个修饰符,模式中的点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。
x 如果设置了这个修饰符,模式中的没有经过转义的或不在字符类中的空白数据字符总会被忽略,并且位于一个未转义的字符类外部的#字符和下一个换行符之间的字符也被忽略。 这个修饰符使被编译模式中可以包含注释。 注意:这仅用于数据字符。 空白字符 还是不能在模式的特殊字符序列中出现,比如序列 。
  注:JavaScript只提供了i和m选项,x和s选项必须使用$regex操作符。
$where $where操作符功能强大而且灵活,他可以使用任意的JavaScript作为查询的一部分,包含JavaScript表达式的字符串或者JavaScript函数。最典型的应用就是比较文档中的两个键的值是否相等.

索引?
在MongoDB上,索引能提高读操作和查询性能,没有索引,mongoDB必须扫描集合中的每一个文档,然后选择与查询条件匹配的文档。
索引的管理<创建索引,删除索引>
创建索引命令
db.foo.ensureIndex({“x”:1, “y”:-1})使用ensureIndex来创建索引,1为升序,-1为倒序

db.test.ensureIndex({“x”:1}, {“unique”:true})

上面这条语句是创建唯一索引,创建唯一索引前可能会有重复数据,我们可以使用”dropDups”来鲁莽的删除这些重复数据,写法如下

db.test.ensureIndex({“x”:1}, {“unique”:true, “dropDups”:true})

我们可以在创建索引时,为索引起个名字,而不是用系统自动生成的名字,写法如下:
db.test.ensureIndex({“x”:1}, {“name”: “myindex”})
当我们的集合数据量很大的时候,创建索引是一件费时费力的事情,我们可以这些写创建索引的语句,是创建索引的过程在后台完成:
db.test.ensureIndex({“x”:1}, {“background”:true})
删除索引
db.test.dropIndex("");
聚合函数?
count
最简单的聚合工具就是count了,它返回document的数量

db.foo.count()可以不跟参数也可以跟查询条件
 distinct
 distinct命令返回指定的key的所有不同的值。你必须指定一个collection和一个key。
 db.runCommand({“distinct”:" people",“key”:" age"})
 group
 {“KaTeX parse error: Expected '}', got 'EOF' at end of input: group":{"_id":"author”,“count”:"{“sum”:1}"}}
 sort
 {"$sort":{“count”:-1}} 排序,类似于sql中的order by -1是降序排列,1是正序排列
 limit

分页
match 用于对文档集合进行筛选