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
}
});
支持类型:String
,Number
,Date
,Buffer
,Boolean
,Mixed
,ObjectId
,Array
模型
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"