[关闭]
@1002522146 2017-06-22T08:17:26.000000Z 字数 3062 阅读 628

Node.js进阶のMongoose

node.js


1. 什么是Mongoose?

Mongoose库简而言之就是对node环境中MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为JavaScript对象供我们使用。


2. 使用

  1. 使用Mongoose必须先安装mongoose
  2. npm install mongoose
  3. //连接Mongodb数据库
  4. const mongoose = require("mongoose");
  5. //连接数据库
  6. mongoose.connect("mongodb://127.0.0.1/my_database");
  7. mongoose.connection.once("open",()=>{
  8. console.log("数据库连接成功");
  9. })
  10. //断开连接
  11. //mongoose.disconnect();

3. 新的对象

3.1 Schema模式对象

模式为集合中的文档定义字段和字段类型。
对于在模式中的每个字段,你都需要定一个特定的值类型。受支持的类型如下:
String Number Boolean Array Buffer Date ObjectId或Oid Mixed
需要为你计划使用的每个不同的文档类型都定义一个模式。

创建模式定义

模式需要通过mongoose的Schema属性来创建,这个属性是一个构造函数。
new Schema(definition,option)
definition(描述模式)
options 配置对象,定义与数据库中集合的交互

options常用选项

  1. const mongoose = requier("mogoose");
  2. //创建userSchema
  3. const userSchema = new mongoose.Schema({
  4. username:{
  5. type:String,
  6. unique:true,
  7. index:1
  8. },
  9. password:String,
  10. })
  11. //定义并导出UserModel
  12. module.exports = mongoose.module("user",userSchema)

3.2 Model模型

Model模型,是经过Schema构造来的,是Schema的编译版本。一个model的实例直接映射为数据库中的一个文档。基于这种关系, 以后的增删改查(CURD)都要通过这个Model实现。

model(name, [schema], [collection] , [skipInit])
name参数相当于模型的名字,以后可以同过name找到模型。
schema是已创建的模式对象。
collection是要连接的集合名。
skipInit是否跳过初始化,默认是false。

  1. //获取模型
  2. let UserModel = mongoose.model("user",userSchema);
  3. //通过Model对象向数据库中插入一条数据
  4. UserModel.create({name:"舒克",age:18},(err)=>{
  5. if(!err){
  6. console.log("插入成功~~");
  7. }
  8. });
  9. //Model对象的方法
  10. remove(conditions, callback)
  11. deleteOne(conditions, callback)
  12. deleteMany(conditions, callback)
  13. find(conditions, projection, options, callback)
  14. findById(id, projection, options, callback)
  15. findOne(conditions, projection, options, callback)
  16. count(conditions, callback)
  17. create(doc, callback)
  18. update(conditions, doc, options, callback)

3.3 Document 文档对象

  1. //创建文档对象
  2. let user = new UserModel({
  3. username:"舒克",
  4. password:"123123"
  5. });
  6. //将文档对象存储到数据库中
  7. user.save((err)=>{
  8. if(!err){
  9. console.log("插入成功");
  10. }
  11. });
  12. //常用方法
  13. UserModel.findOne({username:"舒克"},(err, doc)=>{
  14. if(!err){
  15. //从数据库中查询到的数据都是Document对象
  16. console.log(doc instanceof UserModel);
  17. //获取Document对象的id属性值
  18. console.log(doc.id);
  19. //获取对象中的指定属性
  20. console.log(doc.username);
  21. console.log(doc.get("username"));
  22. //修改对象的属性,set()
  23. doc.set("password","321");
  24. //console.log(doc);
  25. //提交修改
  26. //doc.save();
  27. //修改对象
  28. doc.update({$set:{password:"23456"}},(err)=>{
  29. if(!err){
  30. console.log("修改成功");
  31. console.log(doc.password);
  32. }
  33. });
  34. //删除文档
  35. /*doc.remove((err) =>{
  36. if(!err){
  37. console.log("删除成功");
  38. }
  39. });*/
  40. }
  41. })

3.4 Query对象

当我们调用Model的查询方法时,都需要传递一个回调函数作为参数,mongoose会通过回调函数将查询到的结果返回。
如果我们调用查询方法时,没有传递回调函数,则查询不会发生,而是返回一个Query对象。
我们可以通过这个Query对象来控制查询的条件,以及是否查询。

  1. let UserModel = mongoose.model("user",userSchema);
  2. //查询数据库中的文档
  3. let userQuery = UserModel.find({});
  4. //exec() 可以调用query对象的exec()方法来执行查询
  5. userQuery.exec((err,docs)=>{
  6. if(!err){
  7. console.log(docs);
  8. }
  9. });
  10. //Query对象的方法
  11. equals(doc)
  12. id
  13. get(path,[type])
  14. set(path,value,[type])
  15. update(update,[options],[callback])
  16. save([callback])
  17. remove([callback])
  18. isNew
  19. isInit(path)
  20. toJSON()
  21. toObject()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注