mongoose學(xué)習(xí)筆記5之Queries

假設(shè)以下代碼都運行在

let mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
let db = mongoose.connection;
db.on('error', () => {
  console.error('鏈接失敗');
});
db.once('open', function () {
  //下面講到的所有代碼都在這里運行
});

Queries

文檔可以通過模型的幾個靜態(tài)輔助方法檢索。
涉及指定查詢條件的任何模型方法可以以兩種方式執(zhí)行:
當(dāng)一個回調(diào)函數(shù):

  • 被傳遞,操作將立即執(zhí)行,結(jié)果傳遞到回調(diào)函數(shù)。

  • 不傳遞,則返回一個Query實例,為您提供一個特殊的QueryBuilder接口。
    讓我們來看看當(dāng)傳遞回調(diào)時會發(fā)生什么:

    let Schema = mongoose.Schema;
    let schema = new Schema({
        name:String,
        age:Number,
        occupation:String
    });
    let Person = mongoose.model('Person',schema);
    let man = new Person({
        name:'noshower',
        age:22,
        occupation:'teacher'
    });
    man.save(function(err,man){
        if(err){
            return console.error(err);
        }
        console.log(man);// { __v: 0,name: 'noshower',age: 22,occupation: 'teacher',_id: 587a0234a693c31ed46c4885 }
    // 查找名叫‘noshower'的人,選擇“名字”和“職業(yè)”字段
        Person.findOne({"name":"noshower"},'name occupation',function(err,man){
            console.log(man);//{ _id: 587a02251d73bb1ec61ace04, name: 'noshower', occupation: 'teacher' }
        });
    });
    

這里我們看到查詢立即執(zhí)行,結(jié)果傳遞給我們的回調(diào)。 Mongoose中的所有回調(diào)都使用模式:callback(error,result)。如果執(zhí)行查詢時發(fā)生錯誤,則error參數(shù)將包含錯誤文檔,結(jié)果將為null。如果查詢成功,error參數(shù)將為null,并且result將填充查詢的結(jié)果。

任何地方回調(diào)被傳遞到Mongoose中的查詢,回調(diào)函數(shù)都遵循這個模式callback(err,result)。result取決于操作:對于findOne(),它是一個單個文檔,對于find()它是文檔列表,對于count()它是文檔數(shù),對于update()它是受影響的文檔數(shù)等等。

現(xiàn)在讓我們看看當(dāng)沒有回調(diào)被傳遞時會發(fā)生什么:

  let Schema = mongoose.Schema;
    let schema = new Schema({
        name:String,
        age:Number,
        occupation:String
    });
    let Person = mongoose.model('Person',schema);
    //找出一條名叫"noshower"的文檔
    let query = Person.findOne({name:'noshower'});
    //選擇"name""occupation"字段
    query.select('name occupation');
    //稍后執(zhí)行查詢
    query.exec(function(err,person){
        if(err){
            return console.error(err);
        }
        console.log(person);//{ _id: 587a02251d73bb1ec61ace04, name: 'noshower', occupation: 'teacher' }
    });
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指南 假設(shè)以下代碼都運行在 Schema 定義 schema 在Mongoose中,任何事情都是從Schema(模...
    打鐵大師閱讀 5,630評論 1 8
  • Mongodb 配置選項 通常在mongod.conf中 配置文件 設(shè)置了配置文件后啟動時以自定義的配置文件啟動:...
    AkaTBS閱讀 1,148評論 0 6
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,562評論 19 139
  • 原文地址 本文簡單的介紹了數(shù)據(jù)庫,以及如何在 Node/Express 中應(yīng)用他們。之后展示如何使用Mongoos...
    前端幼兒班閱讀 5,304評論 1 5
  • 入了這一行,才真的發(fā)現(xiàn)國內(nèi)咨詢行業(yè)真是沙泥俱下魚龍混雜。以前總覺得談判是件多么隆重的事情,要有個談判桌,雙方都精心...
    yoyoDbh閱讀 269評論 0 0

友情鏈接更多精彩內(nèi)容