2016-05-09 11 views
6

デフォルトでは、スキーマのlocationフィールドを非表示にします。Mongoose select:falseネストされたオブジェクトの位置で機能しない

User.find({ }, function(err, result){ console.log(result[0]); });

が出力され::

{ 
    cellphone: '+33656565656', 
    location: { type: 'Point', coordinates: [Object] } <-- Shouldn't 
} 
var userSchema = new mongoose.Schema({ 

cellphone: { 
    type: String, 
    required: true, 
    unique: true, 
}, 

location: { 
    'type': { 
    type: String, 
    required: true, 
    enum: ['Point', 'LineString', 'Polygon'], 
    default: 'Point' 
    }, 
    coordinates: [Number], 
    select: false, <-- here 
    }, 
}); 

userSchema.index({location: '2dsphere'}); 

は呼び出すとき...私はそれにselect: falseプロパティを追加しましたが、文書を選択する際には、常に返されます

編集:説明(@alexmacに感謝)

スキーマタイプ選択オプションは、タイプではなくフィールドオプションに適用する必要があります。あなたの例では、複合タイプの場所を定義し、タイプに選択オプションを追加しました。

+0

何findOneについて、それを返したりしませんか? – libik

+0

問題は解決されました。そして、はい、findOneもそれを返しました:) – FrenchFalcon

+0

解決策を共有した方が良いでしょう。 @MalteseFalcon – Cozzbie

答えて

2

あなたは、まずlocationSchemaを作成する必要がありますし、select: falseでその使用のスキーマ型後:

var locationSchema = new mongoose.Schema({ 
    'type': { 
     type: String, 
     required: true, 
     enum: ['Point', 'LineString', 'Polygon'], 
     default: 'Point' 
     }, 
     coordinates: [Number] 
    } 
}); 

var userSchema = new mongoose.Schema({ 
    location: { 
     type: locationSchema, 
     select: false 
    } 
}); 
+0

私もこれを試しましたが、私はどちらもうまくいきません。 – FrenchFalcon

+0

私は近くに座標は表示されませんが、残りの場所は '' location ":{" type ":" Point "}' です。注:場所にもselect:falseを追加しました。 – FrenchFalcon

+0

あなたは 'coordinate'フィールドだけを隠したいと思っていました。もし' location'を完全に隠したいのであれば、そのスキーマを定義して型として使うべきです。 – alexmac

関連する問題