【问题标题】:Node, Mongoose js - Populate never returning a resultNode,Mongoose js - 填充从不返回结果
【发布时间】:2017-05-19 22:08:52
【问题描述】:

我是 MongoDB / Mongoose 的新手,我正在尝试将用户与网站集进行匹配。这个想法是将用户分配到一个站点。我想根据存储在站点集合中的 id 获取此用户名,然后显示它。用户名可以更改,所以我不能使用子文档。

在尝试使用填充将用户名绑定到我的查询时,查询永远不会返回结果。没有错误,什么都没有。可以称之为挂起,但它是异步的,所以无论 mongo 在后台做什么我都不知道。

我的身份验证系统是 passport.js。

这是我的模型:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var passportLocalMongoose = require('passport-local-mongoose');

var Account = new Schema({
    username: String,
    password: String,
    isadmin: Boolean,
    islocked: Boolean
});

Account.plugin(passportLocalMongoose);

module.exports = mongoose.model('Account', Account);


var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var siteSchema = new Schema({
    title: String,
    locked: Boolean,
    userid: {type: mongoose.Schema.Types.ObjectId, ref: 'Account'}
});

var Site = mongoose.model('Site', siteSchema);

module.exports = Site;

这是我的查询:

Site.find({}.populate('userid'), function (err, postIn) {
    if (err) {
        throw err
    } else {
        res.send(postIn);
    }
});

任何想法 - 在此停留了一段时间。

【问题讨论】:

    标签: node.js mongodb mongoose passport.js mongoose-populate


    【解决方案1】:

    使用 .exec。它配置填充。

    Site.find({}).populate('userid').exec(function (err, postIn) {
            if (err) {
                throw err
            } else {
                res.send(postIn);
            }
        });
    

    【讨论】:

    • 没有区别,结果相同。反正我一般不使用exec,总能得到结果。
    • 刚刚在 .populate 之前的 find 之后编辑缺少 )
    • 更正,我明白了我的错误 - populate 是 find 后的一个单独的函数,带有回调。可以,谢谢。
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 2019-06-25
    • 2014-11-09
    • 2021-12-10
    • 2015-08-26
    • 2014-11-02
    • 2015-07-15
    • 2023-04-11
    相关资源
    最近更新 更多