Mongodb 相关笔记

Schema

const Schema = mongoose.Schema;
// 定义表模型的数据类型
// required 必须的 接收一个 boolean 或者 function
const blogSchema = new Schema({
  title:  {type: String, required: true},
  author: String,
  age:  { type: Number, min: 18, max: 65 },
  comments: [{ body: String, date: Date }],
  date: { type: Date, default: Date.now },// default 默认当前时间戳
  hidden: Boolean,
  meta: {
    votes: Number,
    favs:  Number
  }
});

支持类型:StringNumberDateBufferBooleanMixedObjectIdArray

模型

options 有如下选项:

  • safe (boolean): 默认为true。安全模式。
  • upsert (boolean): 默认为false。如果不存在则创建新记录。
  • multi (boolean): 默认为false。是否更新多个查询记录。
  • runValidators: 如果值为true,执行Validation验证。
  • setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
  • strict (boolean): 以strict模式进行更新。
  • overwrite (boolean): 默认为false。禁用update-only模式,允许覆盖记录

新增字段

为atest集合新增一个字段content

db.atest.update({},{$set:{content:""}},{multi:1})

删除uname字段

db.atest.update({},{$unset:{uname:""}},false,true)

修改字段,把content改为mcontent

db.atest.update({}, {$rename : {"content" : "mcontent"}}, false, true)

update命令

update命令格式:

db.collection.update(criteria,objNew,upsert,multi)

参数说明:
criteria:查询条件
objNew:update对象和一些更新操作符
upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。
multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。

复杂条件

属性值自增 $inc

增加属性 $set

删除属性 $unset

查询条件

mongoose查询条件其实就是在find方法的基础上添加mongodb条件操作符,如Thing.find().gt('age', 21)就等同于Thing.find({age: {$gt: 21}}),mongodb条件操作符如下:

比较

名字 描述
$eq (判断相等)
$gt (判断大于)
$gte (判断大于等于)
$in (判断在其中)
$lt (判断小于)
$lte (判断小于等于)
$ne (判断所有值都不等于指定值)
$nin (判断不在其中)

逻辑

名字 描述
$and (与)
$not (非)
$nor (异或)
$or (或)

元素

名字 描述
$exists 字段是否存在 {name: {$exists: true}}
$type Selects documents if a field is of the specified type.

评估

名字 描述
$expr Allows use of aggregation expressions within the query language.
$jsonSchema Validate documents against the given JSON Schema.
$mod Performs a modulo operation on the value of a field and selects documents with a specified result.
$regex Selects documents where values match a specified regular expression.
$text Performs text search.
$where Matches documents that satisfy a JavaScript expression.

地理空间

名字 描述
$geoIntersects Selects geometries that intersect with a GeoJSON geometry. The 2dsphere index supports $geoIntersects.
$geoWithin Selects geometries within a bounding GeoJSON geometry. The 2dsphere and 2d indexes support $geoWithin.
$near Returns geospatial objects in proximity to a point. Requires a geospatial index. The 2dsphere and 2d indexes support $near.
$nearSphere Returns geospatial objects in proximity to a point on a sphere. Requires a geospatial index. The 2dsphere and 2d indexes support $nearSphere.

数组

名字 描述
$all Matches arrays that contain all elements specified in the query.
$elemMatch Selects documents if element in the array field matches all the specified $elemMatch conditions.
$size Selects documents if the array field is a specified size.

位操作

名字 描述
$bitsAllClear Matches numeric or binary values in which a set of bit positions all have a value of 0.
$bitsAllSet Matches numeric or binary values in which a set of bit positions all have a value of 1.
$bitsAnyClear Matches numeric or binary values in which any bit from a set of bit positions has a value of 0.
$bitsAnySet Matches numeric or binary values in which any bit from a set of bit positions has a value of 1.

注释

名字 描述
$comment Adds a comment to a query predicate.

投影操作

名字 描述
$ Projects the first element in an array that matches the query condition.
$elemMatch 匹配内数组内的元素
$meta Projects the document’s score assigned during $text operation.
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
  $within       范围查询(基于LBS)
  $box          范围查询,矩形范围(基于LBS)
  $center           范围醒询,圆形范围(基于LBS)
  $centerSphere  范围查询,球形范围(基于LBS)
  $slice        查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
    // 查询 quantity 小于 20  或者 price 等于 10 的文档
    // 逻辑与多个条件:逗号隔开
    // 逻辑或多个条件 {$or:[{a:1},{b:2}]}
    Model.find( { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] } ) 
    //数组不为空
    Model.find({'keywords.0':{$exists:true}})
    //数组查询1 pid=[1,2,3,4,5,6]
    Model.find({pid:{$elemMatch:{$eq:1}}})
    //数组查询2 keys=[{id:1, num:5}]
    Model.find({keys:{$elemMatch:{id:1}}})
    //查询 匹配array数组的前10个元素
    Model.find({“array”:{"$slice" : 10} } )
    //查询 匹配array数组的第5个到第10个元素
    Model.find({“array”:{"$slice" : [5,10] } } )

其他常用运算符

显示前10 .limit(10)

显示11-20 .skip(10).limit(10) skip( 页码-1 * 每页条数)

备份、恢复

共用参数:

  • -h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
  • --port:代表远程连接的数据库的端口,默认连接的远程端口27017;
  • -u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
  • -p,--password:代表连接数据库的账号对应的密码;
  • -d,--db:代表连接的数据库;
  • -c,--collection:代表连接数据库中的集合;
  • -f, --fields:代表集合中的字段,可以根据设置选择导出的字段;
  • --type:代表导出输出的文件类型,包括csv和json文件;

一、导出工具mongoexport

  • -o, --out:代表导出的文件名;
  • -q, --query:代表查询条件;
  • --skip:跳过指定数量的数据;
  • --limit:读取指定数量的数据记录;
  • --sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。
    # 备份表
    mongoexport -d Database  -c words -o "d:\words.txt"
    

二、导入工具mongoimport

  • --file:导入的文件名称
  • --headerline:导入csv文件时,指明第一行是列名,不需要导入;
# 导入表
mongoimport -d Database -c words --file "d:\words.txt"
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc阅读 2,810评论 0 0
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,693评论 0 3
  • 一、安装 nfs server 端应用 二、配置nfs 配置 nfs 目录和读写权限相关配置。 将下列内容添加进最...
    二号潜水艇阅读 11,130评论 0 5
  • 一、函数响应式编程(FRP) 响应式编程 简称 RP(Reactive Programming),它是一种面向数据...
    凡几多阅读 2,951评论 5 7