mongoose

安装

npm i --save mongoose
npm init -y
touch my.js

查找tests集合所有记录

var mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:10086/mydb', { useNewUrlParser: true, useUnifiedTopology: true });
// 绑定连接成功触发的一次性事件
mongoose.connection.once('open', () => {
    console.log('connceted to database.')
});
// 设置该数据库field类型
var sc = mongoose.Schema({
    name: String, age: Number
})
// 获得tests集合的模型
//两个参数Test为对应集合去掉s后首字母大写
//var test = mongoose.model("Test", sc);
//三个参数指定该模型为test集合
var test = mongoose.model("Test", sc,"test");
// tests集合对象查询
test.find({}, function (err, doc) {
    if (err) {
        console.log(err + "e");

    } else {
        console.log(doc + "d");

    }
})


node my.js

更新数据

Test.updateOne({ name: "li" }, { name: "li", age: 123456, add: "北京" }, function (err, doc) {
    if (err) {
        console.log(err);
        return;
    } else {
        console.log(""+doc+"update");
    }

删除数据

Test.deleteOne({name:"teee"},(err,res)=>{console.log(res);
});
Test.deleteMany({name:"teee"},(err,res)=>{console.log(res);
});

连接

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

绑定连接事件

var db = mongoose.connection;

//长期事件,错误发生时触发
db.on('error', console.error.bind(console, 'connection error:'));

//一次性事件
db.once('open', function() {
  // we're connected!y
});

//绑定断开
db.connection.on('disconnected', function () {    
    console.log('数据库连接断开');  
})

//断开连接
mongoose.disconnect();

设置约束

var mySchema = mongoose.Schema({
    name: String,
    gender: {
        type: String,                       //类型
        default: "female"                      //默认值
    }
});

model绑定约束

var Model = mongoose.model('collectionsname',mySchema);

生成dos对象

var blogEntity = new blogModel({
    title:  "Mongoose",
    author: "L",
    body:   "Documents are instances of out model. Creating them and saving to the database is easy",
    comments: [{ body: "It's very cool! Thanks a lot!", date: "2014.07.28" }],
    hidden: false,
    meta: {
        votes: 100,
        favs:  99
    }
})

执行添加操作

blogEntity.save(function(err, docs){
    if(err) console.log(err);
    console.log('保存成功:' + docs);
})

crud

增(C)

var doc = { title: "Mongoose", author: "L", } ;
blogModel.create(doc,
    function (err, docs) {
        if (err) { console.log(err); }
        console.log('保存成功:' + docs);
    });

多条数据插入,将多条数据一次性插入,相对于循环使用create保存会更加快。

Model.insertMany([
    { title: "mongoose1", author: "L" },
    { title: "mongoose2", author: "L" }],
    function (err, docs) {
        if (err) { console.log(err); }
        console.log('保存成功:' + docs);
    });

查(R)

conditions:查询条件;projection:控制返回的字段;options:控制选项;callback:回调函数。

blogModel.find({title: "Mongoose", meta.votes: 100},
 {title: 1, author: 1, body: 1}, //显示的字段投影
function(err, docs)
{ if(err) console.log(err);
    console.log('查询结果:' + docs);})

查询“title”标题为“Mongoose”,并且“meta”中“votes”字段值为“100”的记录,返回仅返回“title”、“author”、“body”三个字段的数据。

conditions:查询条件;projection:控制返回的字段;options:控制选项;callback:回调函数。
只返回第一个查询记录。

Model.findById(id, [projection], [options], [callback])

id:指定_id的值;projection:控制返回的字段;options:控制选项;callback:回调函数。

改(U)

Model.update(conditions, doc, [options], [callback])

conditions:查询条件;doc:需要修改的数据,不能修改主键(_id);options:控制选项;callback:回调函数,返回的是受影响的行数。
options有以下选项:
  safe (boolean): 默认为true。安全模式。
  upsert (boolean): 默认为false。如果不存在则创建新记录。
  multi (boolean): 默认为false。是否更新多个查询记录。
  runValidators: 如果值为true,执行Validation验证。
  setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
  strict (boolean): 以strict模式进行更新。
  overwrite (boolean): 默认为false。禁用update-only模式,允许覆盖记录。

blogModel.update({title: "Mongoose"}, {author: "L"}, {multi: true}, function(err, docs){    if(err) console.log(err);    console.log('更改成功:' + docs);})

以上代码先查询“title”为“Mongoose”的数据,然后将它的“author”修改为“L”,“multi”为true允许更新多条查询记录。

Model.updateMany(conditions, doc, [options], [callback])

一次更新多条

Model.updateOne(conditions, doc, [options], [callback])

一次更新一条

Model.findByIdAndUpdate(id, [update], [options], [callback])

id:指定_id的值;update:需要修改的数据;options控制选项;callback回调函数。
options有以下选项:
  new: bool - 默认为false。返回修改后的数据。
  upsert: bool - 默认为false。如果不存在则创建记录。
  runValidators: 如果值为true,执行Validation验证。
  setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
  sort: 如果有多个查询条件,按顺序进行查询更新。
  select: 设置数据的返回。

Model.findOneAndUpdate([conditions], [update], [options], [callback])

conditions:查询条件;update:需要修改的数据;options控制选项;callback回调函数。
options有以下选项:
  new: bool - 默认为false。返回修改后的数据。
  upsert: bool - 默认为false。如果不存在则创建记录。
  fields: {Object|String} - 选择字段。类似.select(fields).findOneAndUpdate()。
  maxTimeMS: 查询用时上限。
  sort: 如果有多个查询条件,按顺序进行查询更新。
  runValidators: 如果值为true,执行Validation验证。
  setDefaultsOnInsert: 如果upsert选项为true,在新建时插入文档定义的默认值。
  passRawResult: 如果为真,将原始结果作为回调函数第三个参数。

删(D)

Model.remove(conditions, [callback])

blogModel.remove({author: "L"}, function(err, docs){    if(err) console.log(err);    console.log('删除成功:' + docs);})

删除“author”值为“L”的记录。

Model.findByIdAndRemove(id, [options], [callback])

id:指定_id的值;update:需要修改的数据;options控制选项;callback回调函数。
options有以下选项:
  sort: 如果有多个查询条件,按顺序进行查询更新。
  select: 设置数据的返回。

Model.findOneAndRemove(conditions, [options], [callback])

conditions:查询条件;update:需要修改的数据;options控制选项;callback回调函数。
options有以下选项:
  sort: 如果有多个查询条件,按顺序进行查询更新。
  maxTimeMS: 查询用时上限。
  select: 设置数据的返回。

复杂条件查询

其他操作参考

你可能感兴趣的:(mongoose)