Rol*_*Beh 3 database mongodb nosql
我的数据库中有一个"用户"集合.用户可以是多个团队的成员.
我使用数组来引用团队ID.
{ _id: ObjectId("552544fd600135861d9e47d5)",
name : "User1",
teams: [
"5527a9493ebbe2452666c238",
"5527b1be3371e3a827fa602c"
]
}
Run Code Online (Sandbox Code Playgroud)
这些团队只不过是一个集合:
{ _id: ObjectId("5527a9493ebbe2452666c238"),
name: "Team 1"
}
{ _id: ObjectId("5527b1be3371e3a827fa602c"),
name: "Team 2"
}
Run Code Online (Sandbox Code Playgroud)
现在我想获得用户所属的所有团队的名称.
我只是找到了这样查询的方式:
db.teams.find(
{_id:{$in:
[ObjectId("5527a9493ebbe2452666c238"),
ObjectId("5527b1be3371e3a827fa602c")]
}})
Run Code Online (Sandbox Code Playgroud)
为此,我需要专门为此查询创建一个数组.我宁愿尝试避免这种情况,因为我已经将ID作为字符串格式的数组提供.像这样的东西会很棒:
db.teams.find(
{_id:{$in:
["5527a9493ebbe2452666c238",
"5527b1be3371e3a827fa602c"] // Strings here, not ObjectIDs
}})
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有没有什么方法可以用一组字符串ID查询ObjectID?
谢谢你和罗尔夫
您可以结合使用mongodb findOne()和find()游标方法以及本机JavaScript map方法来首先获取特定用户(将是一个字符串数组)的团队ID,然后使用map函数将团队的字符串id的数组映射到ObjectId的数组,最后用结果数组作为$in运算符表达式查询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 } });
Run Code Online (Sandbox Code Playgroud)
输出:
/* 0 */
{
"_id" : ObjectId("5527a9493ebbe2452666c238"),
"name" : "Team 1"
}
/* 1 */
{
"_id" : ObjectId("5527b1be3371e3a827fa602c"),
"name" : "Team 2"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5226 次 |
| 最近记录: |