MongoDB找到key等于数组中字符串的位置

cno*_*gr8 4 mongodb

我试图在一个集合中找到所有给定键等于数组中的一个字符串的文档.

下面是集合的一个例子.

{
  roomId = 'room1',
  name = 'first'
},
{
  roomId = 'room2',
  name = 'second'
},
{
  roomId = 'room3',
  name = 'third'
}
Run Code Online (Sandbox Code Playgroud)

并且继承了数组的一个例子.

[ 'room2', 'room3' ]
Run Code Online (Sandbox Code Playgroud)

我认为会起作用的是......

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

我怎样才能实现这一目标?

可以解决的一种方法是做一个for循环......

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

但这并不理想......

mne*_*syn 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" }
Run Code Online (Sandbox Code Playgroud)

这不是你所期望的吗?

测试w/MongoDB 2.1.1