在MongoDB中查询数组中的多个objectid

在MongoDB中查询数组中的多个objectid,mongodb,database,nosql,Mongodb,Database,Nosql,我的数据库中有一个“用户”集合。一个用户可以是多个团队的成员 我使用数组来引用团队ID { _id: ObjectId("552544fd600135861d9e47d5)", name : "User1", teams: [ "5527a9493ebbe2452666c238", "5527b1be3371e3a827fa602c" ] } 这些团队只不过是以下内容的集合: { _id: ObjectId("5527a9493ebbe2452

我的数据库中有一个“用户”集合。一个用户可以是多个团队的成员

我使用数组来引用团队ID

{ _id: ObjectId("552544fd600135861d9e47d5)", 
  name : "User1",
  teams: [
        "5527a9493ebbe2452666c238",
        "5527b1be3371e3a827fa602c"
    ]
}
这些团队只不过是以下内容的集合:

{ _id: ObjectId("5527a9493ebbe2452666c238"),
  name: "Team 1"
}
{ _id: ObjectId("5527b1be3371e3a827fa602c"),
  name: "Team 2"
}
现在,我想获得用户所属的所有团队的名称

我只找到了这样查询它的方法:

db.teams.find(
   {_id:{$in:
      [ObjectId("5527a9493ebbe2452666c238"),
      ObjectId("5527b1be3371e3a827fa602c")]
   }})
为此,我需要专门为此查询创建一个数组。我宁愿尽量避免这种情况,因为我已经有了字符串格式的数组ID。像这样的东西会很棒:

db.teams.find(
   {_id:{$in:  
          ["5527a9493ebbe2452666c238",
          "5527b1be3371e3a827fa602c"]  // Strings here, not ObjectIDs
   }})
但这是行不通的。有没有合适的方法可以用一组字符串ID查询ObjectID

谢谢和问候
Rolf

您可以将mongodb和cursor方法与本机JavaScript方法结合使用,首先获取特定用户的团队id(将是字符串数组),然后使用map函数将团队的字符串id数组映射到ObjectId数组,最后查询teams集合,结果数组作为运算符表达式中的
$:

var teams = db.users.findOne({"name": "User1"}).teams;
var obj_ids = teams.map(function (item){ return ObjectId(item)});
db.teams.find({ "_id": { "$in": obj_ids } });
输出

/* 0 */
{
    "_id" : ObjectId("5527a9493ebbe2452666c238"),
    "name" : "Team 1"
}

/* 1 */
{
    "_id" : ObjectId("5527b1be3371e3a827fa602c"),
    "name" : "Team 2"
}

您好@Rolf您能解释一下吗?我不知道您为什么要签入
团队
集合您只需检查
团队
用户
集合中显示的ID我想获得团队的名称(以及更多的元数据,这里没有说明)。在Users集合中,我只有TeamID可用作对teams集合的引用。这是一个很好的解决方法!谢谢到目前为止,我已经“自己”遍历了数组,这基本上只是另一种方法。但我想知道是否有任何本地MongoDB特性可以帮助我做到这一点。也许我的数据模型是错误的,但我认为在这里使用引用模型是有意义的。