mongodb - 需要将用户 ID 数组转换为 ObjectId 以在聚合函数中使用
问题描述
我正在使用聚合框架处理一些旧代码。聚合看起来像这样:
User.aggregate([
{ $match: {
_id: { $in: invitedUserObjectIds, $ne: game.createdBy._id },
...
},
...
]
最初,该代码具有类似这样的字符串形式的用户 ID ['qwertyuiop',...]
。它正在工作。
现在为了让它正常工作,我必须在将新的 ObjectId 数组传递给$match
聚合管道阶段之前将每个字符串 id 转换为 ObjectId。
没什么大不了的,但试图理解为什么会这样,或者我是否遗漏了一些简单的东西?我测试了完全相同的查询,只invitedUserObjectIds
更改为字符串 ID 数组或对象 ID 数组。
解决方案
MongoDB 查询运算符是类型敏感的。
为了正确匹配,查询中参数的数据类型必须与存储在数据库中的文档中字段的数据类型匹配。
像猫鼬这样的查询函数findById
将传递的参数转换为模式中为 _id 字段声明的类型。
聚合管道不会自动转换值,因此您需要构建数组以使其包含正确的数据类型以进行匹配。
推荐阅读
- oracle - 在 Dapper 中调用 Oracle 存储过程
- c++ - 如何使用 std::optional 返回 NULL 值?
- android - Android 材质范围日期选择器未正确放置
- python - Pandas groupby 折叠第一行组
- python - 有没有办法使用乌龟在“背景”中绘制?
- git - 你如何告诉 git 删除和添加确实是一个动作?
- jenkins - Maven 3.5.2 是否支持 Java11 构建
- google-cloud-platform - 使用部署管理器的未经身份验证的 CloudRun
- jquery - 导航栏(折叠)不起作用 Bootstrap 5
- r - 当我写入 Excel 工作表时,如何从数字单元格 R 中取出绿色三角形?