mongodb
修改数据
update({id:"107"},{ $set: {"user_id" : '50001'} })
Schema
一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以说是数据属性模型(传统意义的表结构),又或着是“集合”的模型骨架
/* 定义一个 Schema */
var mongoose = require("mongoose");
var TestSchema = new mongoose.Schema({
name : { type:String },//属性name,类型为String
age : { type:Number, default:0 },//属性age,类型为Number,默认为0
time : { type:Date, default:Date.now },
email: { type:String,default:''}
});
上面这个 TestSchema包含4个属性 [name, age, time, email]
Model
由Schema构造生成的模型,除了Schema定义的数据库骨架以外,还具有数据库操作的行为,类似于管理数据库属性、行为的类
var db = mongoose.connect("mongodb://127.0.0.1:27017/test");
// 创建Model
var TestModel = db.model("test1", TestSchema);
test1 数据库中的集合名称, 不存在会创建.
ObjectId
存储在mongodb集合中的每个文档(document)都有一个默认的主键_id,这个主键名称是固定的,它可以是MongoDB支持的任何类型,默认是ObjectId.
ObjectId是一个12字节的 BSON 类型字符串。按照字节顺序,依次代表:
4字节:UNIX时间戳
3字节:表示运行MongoDB的机器
2字节:表示生成此_id的进程
3字节:由一个随机数开始的计数器生成的值
Mongose 逻辑操作符
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
集合操作方法
-1.构造函数, 其实就是model的实例
new TestModel( { name:‘xueyou’, age:21 } );0.创建, 在集合中创建一个文档.
Entity.save(callback);1.构造一个集合, 参数1:集合名称, 参数2:Schema实例
db.model(“test1”, TestSchema );2.查询, 参数1查询条件,或为空对象则返回所有集合文档
model.find({}, callback);3.查询找到的第一个文档
model.findOne({}, callback);4.查询找到的第一个文档,同上. 但是只接受 __id 的值查询
model.findById(‘obj._id’, callback);5.创建, 在集合中创建一个文档
Model.create(文档数据, callback))6.更新,参数1:查询条件, 参数2:更新对象,可以使用MondoDB的更新修改器
Model.update(conditions, update, function(error)7.删除, 参数1:删除条件
Model.remove(conditions,callback);8.集合中所有的文档数量
Model.count(sortType, function(err, total)
游标
limit(3) 限制返回结果的数量,
skip(3) 跳过前3个文档,返回其余的
sort( {“name”:1 , “age”:-1 } ) 排序 键对应文档的键名, 值代表排序方向
hint({close:1}) 强制查询优化器选择某个特殊的索引
mongoose中的exec和then的疑惑?
两者返回的都是 promise对象
exec一般用于独立的动作一次性执行,
then则用于连续性的动作从其方法名也可以区别它们的用法,exec就是执行的意思,
then就是然后怎么怎么,