我正在学习一些节点,并一直在尝试使用猫鼬.目前,我的目标是学习如何使用 populate.

我有项目定义和里程碑要求:

projectSchema = new mongoose.Schema({
    id: String,title: String,description: String,owner: String,site: String,creation_date: Date,milestone_ids: Array,milestones: [{
        type: mongoose.Schema.Types.ObjectId,ref: "Milestone"
    }]
})

Project = mongoose.model("Project",projectSchema)
milestones = require(__dirname + "/milestones.js")();

然后我在projects.js中的某个时刻执行此操作:

Project.find(query,{},{sort: {_id: -1}},function (error,results) {
        callback(results);
    }
).populate("milestones");

我如何填充里程碑?

这是来自mongo的项目数据:

{
    "title": "sitename","description": "online thing","creation_date": {
        "$date": "2013-07-11T19:45:42.139Z"
    },"_id": {
        "$oid": "51df0b66dbdd7c4f14000001"
    },"milestones": [],"milestone_ids": [],"__v": 0
}

这个是与项目基本相关的里程碑:

{
    "title": "Proof of concept","description": "Make it work.","due_date": {
        "$date": "2013-07-11T19:46:38.535Z"
    },"project_id": "51df0b66dbdd7c4f14000001","_id": {
        "$oid": "51df0b9edbdd7c4f14000002"
    },"__v": 0
}

此外,这是里程碑架构:

milestoneschema = new mongoose.Schema({
    id: String,due_date: Date,project_id: {
        type: String,ref: "Project"
    }
})

Milestone = mongoose.model("Milestone",milestoneschema);

解决方法

您需要获得定义查询选项然后执行的顺序,并且可链接的API(例如mongoose Query)无法知道在查询触发后您可能调用的其他方法.因此,当您将回调传递给.find时,mongoose会立即发送查询.

通过回调查找

>查询定义的查询
>因为回调就在那里,查询立即执行并向DB发出命令
>然后.populate发生,但它没有效果,因为查询已经发送到mongo

这是你需要做的:

Project.find(query,{
    sort: {
        _id: -1
    }
}).populate("milestones").exec(function (error,results) {
    callback(results);
});

或者更具可读性:

Project
    .find(query)
    .sort('-_id')
    .populate('milestones')
    .exec(function(error,results) {                  
        callback(results);
    });

省略回调并使用.exec

>传递给.find的查询创建带参数的查询对象>对.sort,.populate等的其他链式调用进一步配置查询> .exec告诉mongoose你完成了配置查询并且mongoose发出了DB命令

javascript – 我应该如何正确使用popong with mongoose?的更多相关文章

  1. mongoose更新对象的两种方法示例比较

    最近在使用mongoose的时候发现了一个之前一直没注意的知识点,下面这篇文章主要给大家介绍了关于mongoose更新对象的两种方法,通过示例代码将两种方法进行详细的对比,以给大家更好的参考学习,需要的朋友可以参考下。

  2. Mongoose经常返回e11000 error的原因分析

    这篇文章主要给大家分析了Mongoose经常返回e11000 error的原因,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友可以们下面来一起看看吧。

  3. Node.js中使用mongoose操作mongodb数据库的方法

    如何利用mongoose将数据写入mongodb数据库呢?操作方法很简单,下面小编给大家分享Node.js中使用mongoose操作mongodb数据库的方法,感兴趣的朋友一起看看吧

  4. node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例

    这篇文章主要介绍了node.js使用mongoose操作数据库实现购物车的增、删、改、查功能,结合实例形式详细分析了node.js使用mongoose框架操作MongoDB数据实现购物车增删改查相关技巧与使用注意事项,需要的朋友可以参考下

  5. 关于在mongoose中填充外键的方法详解

    在学习非关系型数据库mongoDB,希望能够完成数据库的CRUD,采用的是JS做的后台,因此用到了mongoose,下面这篇文章主要给大家介绍了关于在mongoose中填充外键的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

  6. 利用Mongoose让JSON数据直接插入或更新到MongoDB

    这篇文章主要给大家介绍了利用Mongoose让JSON数据直接插入或更新到MongoDB数据库的相关资料,文中详细介绍了配置Mongoose、创建目录及文件、插入数据,POST提交JSON增加一条记录以及询数据,取出刚增加的记录等内容,需要的朋友可以参考下。

  7. mongoose之bulkWrite操作使用实例

    这篇文章主要为大家介绍了mongoose之bulkWrite操作使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  8. node.js连接mongoose数据库方法详解

    之前我们都是通过shell来完成对数据库的各种操作的,在开发中大部分时候我们都需要通过程序来完成对数据库的操作。而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块

  9. 详解Nodejs mongoose

    Mongoose 是在nodejs环境下,对mongodb进行便捷操作的对象模型工具。本文介绍解(翻)密(译)Mongoose插件。这篇文章给大家详细介绍了Nodejs mongoose 的相关知识,感兴趣的朋友一起看看吧

  10. 详解Nodejs基于mongoose模块的增删改查的操作

    本篇文章主要介绍了Nodejs基于mongoose模块的增删改查的操作,Mongoose是MongoDB的一个对象模型工具,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部