繁体   English   中英

猫鼬发现了?

[英]Mongoose find by field?

我正在使用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 }); }); }); 

它在promo中带回一个空数组,但我的db中有文档。

问题似乎是“{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得到的:

在此输入图像描述

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

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

因为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实际上应该是您的文档中的布尔值,那么您需要更新所有文档,以便它们与您现有的架构匹配。 这比使用布尔值的字符串值更可取。

您需要等待订阅加载,尤其是在根(默认)路由。 尝试将查找移动到index模板中的帮助程序,并将其(或布局)包装在被动{{#if Template.subscriptionsReady}}块中

也可以看看:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM