猫鼬发现了?

时间:2016-06-13 00:10:01

标签: node.js mongodb express mongoose

我正在使用mongoDb和mongoose与nodejs(express),一切正常,除了这个函数:

router.get('/', function(req, res, next) {

    promotions.find({active:"true"},function(err,promo){
        if (err)  throw err;

        res.render('index',
            {
                promos: promo
            });

    });

});

它在促销中带回一个空数组,但我的数据库中确实有文件。

问题似乎是“{active:”true“}”中的字段处于活动状态。当我查找没有任何过滤器的文档时(使用“find({},...”),它可以正常工作。

当我在mongo中运行db.promotions.find({active:“true”})时,它可以工作。

这是我的推广架构:

// grab the things we need
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// create a schema
var promotionSchema = new Schema({
    title: String,
    subtitle: String,
    url: String,
    image: String,
    active:
        {
            type: Boolean,
            default: false
        }
});

var Promotion = mongoose.model('Promotion', promotionSchema, 'promotions');

// make this available to our Node applications
module.exports = Promotion;

这是我在mongodb中获得的:

enter image description here

我尝试了{active:true}({“active”:“true”},{“active”:true}等)的所有可能格式,但没有任何效果。

2 个答案:

答案 0 :(得分:4)

架构中定义的字段的数据类型必须与文档中字段的数据类型相匹配。

因为active是文档中的字符串,所以您还需要在模式中将其定义为字符串:

var promotionSchema = new Schema({
    title: String,
    subtitle: String,
    url: String,
    image: String,
    active:
        {
            type: String,
            default: 'false'
        }
});

否则,在您的架构中将active定义为Boolean时,Mongoose会将您的查询中的任何active值投射到truefalse,这与您文档中的'true''false'字符串值不匹配。

当然,如果active实际上 应该是您文档中的布尔值,那么您需要更新所有文档,以便它们与您现有的架构相匹配。这比使用布尔值的字符串值更好。

答案 1 :(得分:0)

您需要等待订阅加载,尤其是在根(默认)路由。尝试将查找移动到 @user = User.find(params[:user_id]) submission = Submission.new(create_params) # submission = Submission.new(:videos => params[:videos]) return api_error(status: 422, errors: submission.errors.full_messages) unless submission.valid? submission.save! render( json: submission, status: 201, location: api_v1_user_submissions_path(@user.id) ) render plain: "success" def create_params # params.require(:submission).permit( # :interview_videos, :status, {videos: []} # ).delete_if{ |k,v| v.nil?} params.permit(:videos, :user_id) end 模板中的帮助程序,并将其(或布局)包装在被动index块中

另见:

https://www.discovermeteor.com/blog/template-level-subscriptions/