2017-07-30 10 views
0

私は数字の配列を持っています。配列の各アイテムを、コレクションの特定のキーのすべての値と比較したいと思います。それは可能ですか?以下の例では、私は、05,07,21,36のIDを持っているオブジェクトのみをつかむ、そして42 ..しかし、この試みは失敗したと思います -Mongoの特定のキーを照会するために配列を反復処理する方法は?

var playlist =[05,07,21,36,42] 

クエリ:

Track.find({ id: playlist })... 

コレクション:

artist:{type: String}, 
title: {type: String}, 
id: {type: String}... 

性が実際に "_id" である - Track.find({ "_id":で{$:プレイリスト}}) - 、私はこれをしようとしたとき、私はエラーが返されました下に印刷されます。何か案は?

メッセージ: 'のObjectIdにキャストモデル "トラック" のパス "_id" で値 "597e2f68c83f5d5ba6723427,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c、597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c、597e2f68c83f5d5ba672342b、597e2f68c83f5d5ba672342d" に失敗しました'、 名: 'CastError'、 のstringValue: ' "597e2f68c83f5d5ba6723427,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c、597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c、597e2f68c83f5d5ba672342b、597e2f68c83f5d5ba672342d"'、 種類: 'ObjectIdが'、 値: '597e2f68c83f5d5ba6723427,597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c、597e2f68c83f5d5ba6723429,597e2f68c83f5d5ba672342c、597e2f68c83f5d5ba672342b、597e2f68c83f5d5ba672342d'、 パス: '_id' 、

+0

すべてのMongoDBのドキュメントを参照してくださいしてみてください**常に**「デフォルトで」 'ObjectId'なく「文字列」で現在' _id'フィールドを持っています。 Mongooseはこのプロパティをデフォルトで 'id'としているので、Mongooseはこのプロパティを"オーバーライドする "ことを理解しておらず、' ObjectId'型にキャストしようとしています。そのタイプの"オーバーライド"する予定がある場合は、スキーマに '{" _id ":false}'をオプションとして指定する必要があります。すなわち、スキーマ({artist:String、title:String、_id:String}、{_id:false}) 'です。次に、マングースは代わりに定義された 'String'を使用することを知っています。 –

+0

これはあなたの質問で定義する 'var playlist = [05,07,21,36,42]'に有効です。しかし、**実際のエラーメッセージ**は、実際には "カンマで区切られた値の文字列"を送信していることを示しています。だから代わりに配列に "文字列"を( '.split()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split)してください。スキーマ内で 'id:String'を定義するのはもちろんですが、値は以下のようになっています:' 'id:String''はスキーマ内で' 'id:String''を定義します。実際には 'ObjectId'型です。 –

答えて

0

$ inを使用する必要があります。 Track.find({ id: { $in: playlist } })

Mongo $in Operator

関連する問題