mongoose提供如下的crud方法

    • save
    • find | findOne
    • update
    • remove

    下面我们使用user模型为例,给出具体例子

    文档

    具体代码

    1. username: 'i5ting',
    2. password: '0123456789'
    3. });
    4. user.save((err, u) => {
    5. t.false(err);
    6. t.is(u.username, 'i5ting');
    7. });

    读取(Retrieve)

    find:根据条件查询,返回的是数组

    1. Model.find(conditions, [fields], [options], [callback])
    2. Finds documents
    3. Parameters:
    4. - conditions <Object>
    5. - [fields] <Object> optional fields to select
    6. - [options] <Object> optional
    7. - [callback] <Function>
    8. Returns:
    9. <Query>

    代码

    1. User.find({}, (err, docs) => {
    2. t.false(err);
    3. t.is(docs.length, 1);
    4. t.is(docs[0].username, 'i5ting');
    5. });

    findOne:根据条件查询,返回的是一条数据对象

    文档

    1. Model.findOne([conditions], [fields], [options], [callback])
    2. Finds one document.
    3. Parameters:
    4. - [conditions] <Object>
    5. - [fields] <Object> optional fields to select
    6. - [options] <Object> optional
    7. - [callback] <Function>
    8. <Query>

    代码

    findByIdAndUpdate:根据ID查找并更新

    文档说明如下

    1. Model.findByIdAndUpdate(id, [update], [options], [callback])
    2. Issues a mongodb findAndModify update command by a documents id.
    3. show code
    4. Parameters:
    5. - id <ObjectId, HexId> an ObjectId or string that can be cast to one.
    6. - [options] <Object>
    7. - [callback] <Function>
    8. Returns:
    9. <Query>
    1. User.findByIdAndUpdate(u._id, {
    2. username: 'sang',
    3. }, (err, user) => {
    4. t.false(err);
    5. t.is(user.username, 'sang');
    6. });

    findOneAndUpdate:根据查询条件查找并更新

    1. Model.findOneAndUpdate([conditions], [update], [options], [callback])
    2. Issues a mongodb findAndModify update command.
    3. Parameters:
    4. - [conditions] <Object>
    5. - [update] <Object>
    6. - [options] <Object>
    7. - [callback] <Function>
    8. Returns:
    9. <Query>

    具体代码

    1. User.findOneAndUpdate({
    2. username: 'i5ting for update 2',
    3. }, {
    4. username: 'sang',
    5. }, (err, user) => {
    6. t.false(err);
    7. t.is(user.username, 'sang');
    8. });

    删除(Delete)

    文档

    代码

    1. User.remove({username: 'i5ting for delete'}, (err, doc) => {
    2. t.false(err);
    3. t.is(doc.result.ok, 1);
    4. t.is(doc.result.n, 1);
    5. });
    1. $ cd db
    2. $ npm test
    3. > ava crud -v
    4. 数据库连接成功
    5. #save()
    6. #find() return array
    7. #findOne() return user obj
    8. #remove()
    9. #findByIdAndUpdate()
    10. #findOneAndUpdate()
    11. 6 tests passed

    调试模式

    调试模式是mongoose提供的一个非常实用的功能,用于查看mongoose模块对mongodb操作的日志,一般开发时会打开此功能,以便更好的了解和优化对mongodb的操作。

    1. var mongoose = require("mongoose");
    2. // 核心代码,是否开启测试
    3. mongoose.set('debug', true);
    4. var db = mongoose.connect("mongodb://127.0.0.1:27017/db_helloworld");
    5. db.connection.on("error", function (error) {
    6. console.log("数据库连接失败:" + error);
    7. });
    8. db.connection.on("open", function () {
    9. console.log("数据库连接成功");
    10. });

    执行测试如下

    1. $ cd db
    2. $ npm test
    3. > koa-db@1.0.0 test /Users/sang/workspace/17koa/book-source/db
    4. > ava crud -v
    5. 数据库连接成功
    6. Mongoose: users.remove({}) {}
    7. #save()
    8. #find() return array
    9. #findById() return array
    10. #findOne() return user obj
    11. #remove()
    12. #findByIdAndUpdate()
    13. #findOneAndUpdate()
    14. Mongoose: users.insert({ username: 'i5ting', password: '0123456789', _id: ObjectId("5734490640caa6d36906b8d4"), __v: 0 })
    15. Mongoose: users.find({}) { fields: undefined }
    16. Mongoose: users.findOne({ username: 'i5ting' }) { fields: undefined }
    17. Mongoose: users.insert({ username: 'i5ting for delete', password: '0123456789', _id: ObjectId("5734490640caa6d36906b8d5"), __v: 0 })
    18. Mongoose: users.insert({ username: 'i5ting for update 1', password: '0123456789', _id: ObjectId("5734490640caa6d36906b8d6"), __v: 0 })
    19. Mongoose: users.insert({ username: 'i5ting for update 2', password: '0123456789', _id: ObjectId("5734490640caa6d36906b8d7"), __v: 0 })
    20. Mongoose: users.remove({ username: 'i5ting for delete' }) {}
    21. Mongoose: users.findAndModify({ _id: ObjectId("5734490640caa6d36906b8d6") }) [] { '$set': { username: 'sang' } } { new: false, upsert: false }
    22. Mongoose: users.findAndModify({ username: 'i5ting for update 2' }) [] { '$set': { username: 'sang' } } { new: false, upsert: false }