js css html

mongoose.js 基础使用——Models

2022-10-22  本文已影响0人  没名字的某某人

Models

Models 是从 Schema 编译来的构造函数。它们的实例就代表着可以从数据库保存和读取的 documents。从数据库创建和读取 document 的所有操作都是通过 model 进行的。

编译model

var schema = mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);

第一个参数是跟 model 对应的集合( collection )名字的 单数 形式。 Mongoose 会自动找到名称是 model 名字 复数 形式的 collection 。 对于上例,Tank 这个 model 就对应数据库中 tanks 这个 collection.model() 这个函数是对 schema 做了拷贝(生成了 model)。 你要确保在调用 .model() 之前把所有需要的东西都加进 schema 里了!

Documents 是model 的实例。

新增

创建它们并保存到数据库非常简单:

var Tank = mongoose.model('Tank', yourSchema);

var small = new Tank({ size: 'small' });
small.save(function (err) {
  if (err) return handleError(err);
  // saved!
})
// or
Tank.create({ size: 'small' }, function (err, small) {
  if (err) return handleError(err);
  // saved!
})

查询

用 mongoose 查询文档相当容易啦,它支持 MongoDB 的高级( rich )查询语法。 查询文档可以用 model 的 find,findById,findOne, 和 where 这些静态方法。

find

基本语法:MyModel.find(conditions, [projection], [options], [callback])

执行完成后可以返回 Query 对象,下面是示例:

// name值john且年龄大于等于18
MyModel.find({ name: 'john', age: { $gte: 18 }});

// 查询名字中包含hn字母,并且仅返回 name与 friends 字段
MyModel.find({ name: /hn/i }, 'name friends', function (err, docs) { })

// 跳过10条查询
MyModel.find({ name: /hn/i }, null, { skip: 10 })

其中合法配置项有(不全):

findById

通过_id字段查找单个文档。findById(id)几乎等同于findOne({_id:id})
基本语法:MyModel.findById(id, [projection], [options], [callback])

MyModel.findById(id, function (err, adventure) {});
findOne

与find 类似,但查询条件是可选的,如果为null或为填写,将返回任意一条文档
基本语法:MyModel.findOne([conditions] [projection], [options], [callback])

删除

remove

modelremove 方法可以删除所有匹配查询条件( conditions )的文档。可以考虑是使用single选项,仅删除一条
基本语法:MyModel.remove(conditions, [callback])

removeOne

同上,但仅会删除一条文档

deleteMany

同上,但不考虑single选项

更新

update

更新数据库中的一个文档而不返回它,该函数的执行会触发update()中间件。
基本语法:MyModel.update(conditions, doc, [options], [callback])

MyModel.update({ name: 'Tobi' }, { ferret: true }, { multi: true }, function (err, raw) {
  if (err) return handleError(err);
  console.log('The raw response from Mongo was ', raw);
  /** {
  acknowledged: true,
  modifiedCount: 2,
  upsertedId: null,
  upsertedCount: 0,
  matchedCount: 2
  }*/
});

其中合法的配置项有:

updateMany

同上,但没有multi 选项

updateOne

同上,但仅更新一个

更多

count

统计数据库集合中匹配文档的数量。
基本语法:MyModel.count(conditions, [callback])

MyModel.count({ type: 'jungle' }, function (err, count) {
  if (err) ..
  console.log('there are %d jungle adventures', count);
});

操作符

查询和投影运算符

比较查询运算符
逻辑查询操作符
元素查询操作符

赋值查询操作符

地理空间操作符

数组查询操作符

位运算操作符

投影操作符

混合查询操作符

更新操作符

字段更新操作符
数组更新操作符
位运算更新操作符

聚合管道阶段

聚合管道操作符

模糊查询

查询 title 包含“教”字的文档:

MyModel.find({title:/教/})

查询 title 包含“教”字开头的文档:

MyModel.find({title:/^教/})

查询 title 包含“教”字结尾的文档:

MyModel.find({title:/教$/})
上一篇下一篇

猜你喜欢

热点阅读