mongoose 文档(四) queries

通过一些model的静态辅助方法可以检索document。

任何 涉及 指定 查询 条件的 model 方法都能通过两个方法执行。

当一个回调函数:

被传递,操作将立即执行,结果传给回调。

没有被传递,返回一个 查询 实例,它提供一个特殊的查询生成接口。

在mongoose 4,Query有 then()函数,因此可以被用来作为一个 promise。

用回调函数执行查询时,将请求指定为JSON 文档。JSON文档的语法和 MongoDB shell 一样。

var Person = mongoose.model(‘Person‘, yourSchema);

// find each person with a last name matching ‘Ghost‘, selecting the `name` and `occupation` fields
Person.findOne({ ‘name.last‘: ‘Ghost‘ }, ‘name occupation‘, function (err, person) {
  if (err) return handleError(err);
  console.log(‘%s %s is a %s.‘, person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host.
})

请求被立即执行并且结果传递到回调。mongoose里所有回调使用的模式: callback(error, result)。如果执行查询中发生错误,error参数会包含一个错误文档,result会是null。如果查询成功,error参数会是null,result会是请求结果。

在mongoose任何地方 回调被传递给查询,回调遵循模式 callback(error, results)。结果取决于运算符:findOne() 是一个可能为空的单document,find()为一列document,count()为document的数目,update() 为受影响的document数量Model的API文档详细介绍什么传递给了回调。

现在看看在没有回调的情况下会发生什么:

// find each person with a last name matching ‘Ghost‘
var query = Person.findOne({ ‘name.last‘: ‘Ghost‘ });

// selecting the `name` and `occupation` fields
query.select(‘name occupation‘);

// execute the query at a later time
query.exec(function (err, person) {
  if (err) return handleError(err);
  console.log(‘%s %s is a %s.‘, person.name.first, person.name.last, person.occupation) // Space Ghost is a talk show host.
})

在上面的代码,query变量是Query类型。Query允许你使用链接语法建立查询而不是指定JSON对象。下面两个例子 是等价的。

// With a JSON doc
Person.
  find({
    occupation: /host/,
    ‘name.last‘: ‘Ghost‘,
    age: { $gt: 17, $lt: 66 },
    likes: { $in: [‘vaporizing‘, ‘talking‘] }
  }).
  limit(10).
  sort({ occupation: -1 }).
  select({ name: 1, occupation: 1 }).
  exec(callback);

// Using query builder
Person.
  find({ occupation: /host/ }).
  where(‘name.last‘).equals(‘Ghost‘).
  where(‘age‘).gt(17).lt(66).
  where(‘likes‘).in([‘vaporizing‘, ‘talking‘]).
  limit(10).
  sort(‘-occupation‘).
  select(‘name occupation‘).
  exec(callback);

API文档中有查询辅助函数列表。

1、引用其他document

MongoDB中没有joins但有时候我们仍想引用其他collection的document。这就是population的由来。查看如何在查询结果中包含其他collection的document。

2、stream

查询也能以从MongoDB到应用程序。仅仅调用查询的stream方法代替exec返回一个QuerySteam的实例。QueryStreams是Node.js 0.8风格的输入流不是Node.js 0.10 风格。

时间: 2024-10-26 21:23:23

mongoose 文档(四) queries的相关文章

mongoose 文档(二)Models

Models是从 Schema 定义编译的构造函数.这些 model 的实例代表能从数据库存储和检索的 documents.数据库中所有document的创建和检索都是这些model处理的. 1.编译第一个model var schema = new mongoose.Schema({ name: 'string', size: 'string' }); var Tank = mongoose.model('Tank', schema); 第一个参数是 model 对应的 collection

c#中操作word文档-四、对象模型

转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual Studio中使用C# 开发关于Word的应用程序 来源:Understandingthe Word Object Model from a .NET Developer's Perspective 五大对象 Application           :代表Microsoft Word应用程序本身 D

翻译qmake文档(四) Building Common Project Types

翻译qmake文档 目录 本章原英文文档:http://qt-project.org/doc/qt-5/qmake-common-projects.html 构建常见的项目类型 本章描述如何设置基于Qt的应用程序.库和插件的三种常见项目类型的qmake项目项目文件.虽然所有的项目类型使用大量相同的变量,但是它们中的每一个都使用项目特定的变量来自定义输出文件. 这里不会描述特定于平台的变量.更多详细修改请查看  Qt for Windows - Deployment 和 Qt for Mac OS

mongoose 文档(七) Population

在mongoose中没有join但有时我们仍然想引用其他collection的document,population由此而来. population是自动将document中指定path替换为其他collection的document的过程.我们能迁移document.多个document.简单对象.多个简单对象或者是查询返回的所有对象. var mongoose = require('mongoose') , Schema = mongoose.Schema var personSchema

mongoose 文档(十) Promises

Built-in Promises Mongoose 异步操作,像 .save() 和 queries,返回 Promises/A+ conformant promises. This means that you can do things like MyModel.findOne({}).then() and yield MyModel.findOne({}).exec() (if you're using co). 这就是说你可以做一些像MyModel.findOne({}).then()

mongoose 文档(八) Connections

我们可以通过利用mongoose的connect()方法连接到MongoDB . mongoose.connect('mongodb://localhost/myapp'); 这是在默认端口(27017)连接到在本地运行的myapp数据库的最低需要.如果本地连接失败那么尝试使用127.0.0.1代替localhost.当本地主机名改变有时会出现问题. 我们也能根据你的环境指定URI中的几个参数. mongoose.connect('mongodb://username:[email protec

mongoose 文档(一) schemas

1.定义shcema 在mongoose里一切都由schema开始.每一个schema对应一个mongoDB collection 并且在那个collection里面定义了documents的模型. var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blogSchema = new Schema({ title: String, author: String, body: String, comments:

mongoose 文档(九) Plugins

插件 schema是可插入的,即,它们可以应用预包装的能力,从而扩展其功能.这是一个非常强大的功能. 假设我们有几个collection在我们的数据库中,要添加的 last-modified功能给它们.用插件会很容易.只需创建一个插件,并把它应用到每个Schema: // lastMod.js module.exports = exports = function lastModifiedPlugin (schema, options) { schema.add({ lastMod: Date

Spring Data MongoDB 四:基本文档修改(update)(一)

Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB添加.删除.修改 一.简介 Spring Data  MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的update的操作,可以对在存储数据时是以键-值对的集合键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档进行修改,我们今天介绍对基本文档的修改的方法.参数进