4

配列内の文字列の 1 つに等しい特定のキーを持つすべてのドキュメントをコレクションで検索しようとしています。

コレクションの一例です。

{
  roomId = 'room1',
  name = 'first'
},
{
  roomId = 'room2',
  name = 'second'
},
{
  roomId = 'room3',
  name = 'third'
}

そして、調べる配列の例を次に示します。

[ 'room2', 'room3' ]

私がうまくいくと思ったのは...

collection.find({ roomId : { $in : [ 'room2', 'room3' ]}}, function( e, r )
{
  // r should return the second and third room
});

どうすればこれを達成できますか?

これを解決できる1つの方法は、forループを実行することです...

var roomIds = [ 'room2', 'room3' ];
for ( var i=0; i < roomIds.length; i++ )
{
  collection.find({ id : roomIds[ i ]})
}

しかし、これは理想的ではありません....

4

1 に答える 1

7

投稿したものが機能するはずです-ループは必要ありません。オペレーターは次の$in作業を行います。

> db.Room.insert({ "_id" : 1, name: 'first'});
> db.Room.insert({ "_id" : 2, name: 'second'});
> db.Room.insert({ "_id" : 3, name: 'third'});
> // test w/ int
> db.Room.find({ "_id" : { $in : [1, 2] }});
{ "_id" : 1, "name" : "first" }
{ "_id" : 2, "name" : "second" }
> // test w/ strings
> db.Room.find({ "name" : { $in : ['first', 'third'] }});
{ "_id" : 1, "name" : "first" }
{ "_id" : 3, "name" : "third" }

それはあなたが期待していることではありませんか?

MongoDB 2.1.1 でテスト済み

于 2012-06-07T13:49:49.123 に答える