2016-06-13 16 views
2

私はnodejsでのMongoDBとマングースを使用しています(表現)と、すべてがこの機能を除いて、正常に動作します:マングースはフィールドで見つけることができますか?

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

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

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

 
    }); 
 

 
});

それはプロモーションで空の配列に戻しますが、私は持っています私のdbの文書。

"{active:" true "}"のフィールドで問題が発生しているようです。

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}({"アクティブ": "true"}、{"アクティブ":true}など)のあらゆる可能な形式を試しましたが、何も機能しません。

+0

私はdb.Promotions.find()は空を返すと思います!それをチェック! –

答えて

3

フィールドのデータ型自分の中で定義されている:

も参照してください反応{{#if Template.subscriptionsReady}}ブロックにindexテンプレートでヘルパーに見つけ、それ(またはレイアウト)を包む移動してみてくださいスキーマは、文書内のフィールドのデータ型と一致する必要があります。だから、

activeは、ドキュメント内の文字列であるので、あなたが同様にあなたのスキーマ内の文字列として定義する必要があります。

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

そうでない場合は、スキーマ内Booleanとして定義activeで、マングースは、いずれかをキャストしますactiveの値がtrueまたはfalseのいずれかになります。これは、ドキュメントの文字列値'true''false'と一致しません。

active実際にはの場合はがドキュメントのブール値になる必要がありますが、既存のスキーマと一致するようにすべてのドキュメントを更新する必要があります。これは、ブール値に文字列値を使用する方が望ましいでしょう。

+0

ありがとうございました!それが問題でした。 mongoDBのドキュメントをBooleanに変更しました。なぜなら、これは最初のはずだったはずだからです。 –

+0

私のために働いた、ありがとう! –

関連する問題