mongodb

作者: 裴general | 来源:发表于2018-07-25 00:06 被阅读0次

1.mongodb关系
表示多个文档之间在逻辑上的联系
(1)嵌入式 db.users.findOne({'name': 'tom'}, {'address': 1})数据越大越慢
(2)引用式
var result = db.users.findOne({'name':'tom'}, {'address_ids': 1})
var addresses = db.address.find({'_id': {'$in':result['address_ids']}})

=========================
2.mongodb数据库引用
(1)手动引用
(2)DBRefs 在调用不同地址时,也需要指定集合,一个文档从多个集合引用文档
{ref :集合名称 ,id : 引用的id, $db :数据库名称,可选参数 }

db[user.address.ref].findOne({'_id':(user.address.id)})

============================
3.mongodb覆盖索引查询
db.user.ensureIndex({gender:1, user_name:1})
覆盖 db.user.find({gender:'M'}, {user_name : 1, _id:0})
不能使用覆盖索引查询
-所有索引字段是一个数组

  • 所有索引字段是一个子文档

=============================
4.mongodb查询分析
explain() 和 hint()函数
db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()
db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

==============================
5.mongodb原子操作
但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。
set 用来指定一个键并更新键值,若键不存在并创建。 {set : { field : value } }

unset 用来删除一个键。 {unset : { field : 1} }

incinc可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减的操作
{ $inc : { field : value } }

push 把value追加到field里面去,field一定要是数组类型才行,如果field不存在,会新增一个数组类型加进去 {push : { field : value } }

pushall 只是一次可以追加多个值到一个数组字段内。 {pushAll : { field : value_array } }

pull 从数组field内删除一个等于value值。 {pull : { field : _value } }

$addToSet 增加一个值到数组内,而且只有当这个值不在数组内才增加。

pop 删除数组的第一个或最后一个元素 {pop : { field : 1 } }

rename 修改字段名称 {rename : { old_field_name : new_field_name } }

偏移炒作
t.update( {'comments.by':'joe'}, {inc:{'comments..votes':1}}, false, true )

¥bit 位操作
{$bit : { field : {and : 5}}}

===================================
mongodb高级索引
数组
db.users.ensureIndex({"tags":1})

子文档
db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

==================================
mongodb索引限制
每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作。所以,如果你很少对集合进行读取操作,建议不使用索引

由于索引是存储在内存(RAM)中,你应该确保该索引的大小不超过内存的限制。

如果文档的索引字段值超过了索引键的限制,MongoDB不会将任何文档转换成索引的集合

集合中索引不能超过64个
索引名的长度不能超过128个字符
一个复合索引最多可以有31个字段

===============================
mongodb ObjectID
前4个字节表示时间戳
接下来的3个字节是机器标识码
紧接的两个字节由进程id组成(PID)
最后三个字节是随机数。

ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()获得文档的创建时间
转换为字符串 new ObjectId().str

===================================
MongoDB Map Reduce 简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结果合并成最终结果(REDUCE)。

db.collection.mapReduce(
function() {emit(key,value);}, //map 函数
function(key,values) {return reduceFunction}, //reduce 函数
{
out: collection,
query: document,
sort: document,
limit: number
}
)

map :映射函数 (生成键值对序列,作为 reduce 函数参数)。
reduce 统计函数,reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。
out 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
query 一个筛选条件,只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
sort 和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
limit 发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

======================================
mongodb全文索引
db.posts.ensureIndex({post_text:"text"})
db.posts.find({text:{search:"runoob"}})

db.posts.getIndexes()

db.posts.dropIndex("post_text_text")

=====================================
mongodb正则表达式
db.posts.find({post_text:{$regex:"runoob"}})

db.posts.find({post_text:{regex:"runoob",options:"$i"}})

var name=eval("/" + 变量值key +"/i")
title:eval("/"+title+"/i")

=======================================
MongoDB GridFS

===================================
创建javascript函数

相关文章

网友评论

      本文标题:mongodb

      本文链接:https://www.haomeiwen.com/subject/uqsumftx.html