mongodb - mongoDB "$lookup 的参数必须是字符串,let: .... is type 3",
问题描述
如何对作为 ids(long) 数组而不是单个 id 的字段进行 $lookup?尝试通过_id从集合'products'中检索产品信息,将其放入数组中,然后将产品信息列表嵌入到仓库的文档中。
不幸的是,我们的 mongo 数据库是 3.2,因此新功能允许使用数组查找(https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#use-lookup-with-an-array) t 申请。
在网上浏览了一堆解决方案,这似乎是最接近的,https://stackoverflow.com/a/50207150,将其修改为以下内容:
db.getCollection('warehouses').aggregate([
{"$match":
// conditions to be matched
},
{ $lookup:
{
from: 'products',
let: {'productIds' : '$productIds' },
pipeline: [
{ $match: { $expr: {$in: ["$_id", "$$productIds"] } } },
],
as: 'productLists'
}
}
])
但是,它收到以下错误:
"arguments to $lookup must be strings, let: .... is type 3".
_id 是数字(长)而不是字符串,有什么解决方法吗?谢谢。
仓库文件样本:
{
"_id" : NumberLong(1),
productIds: [NumberLong(1), NumberLong(2), NumberLong(3)],
"warehouseProperty1" : "warehouseProperty1",
"warehouseProperty2" : "warehouseProperty2",
"warehouseProperty3" : "warehouseProperty3",
"warehouseProperty4" : "warehouseProperty4"
}
样本产品文件:
{
"_id" : NumberLong(1),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
}
期望的输出:
{
"_id" : NumberLong(1),
productIds: [
{
"_id" : NumberLong(1),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
},
{
"_id" : NumberLong(2),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
},
{
"_id" : NumberLong(3),
"productProperty1" : "productProperty1",
"productProperty2" : "productProperty2",
"productProperty3" : "productProperty3",
"productProperty4" : "productProperty4"
},
],
"warehouseProperty1" : "warehouseProperty1",
"warehouseProperty2" : "warehouseProperty2",
"warehouseProperty3" : "warehouseProperty3",
"warehouseProperty4" : "warehouseProperty4"
}
解决方案
推荐阅读
- node.js - NodeJS:第一个斜杠的路由参数有效,但第二个斜杠的路由参数无效
- r - 使用 dplyr 在组内进行总结
- mysql - 如何在 NestJS 和 Knex 中构建复杂的 MySQL 查询
- java - Android studio解析json对象
- graphql - GraphQL 拼接 VS 合并模式
- python - 在保留其他值的同时使用列表聚合/删除行中的字符串(python)?
- facebook-opengraph - 网页预览仅限于某些平台
- java - 如何使用自己的快速排序来决定具有多个输入数据的任务
- python - 如何在不和谐的文本频道上发送嵌入的 Facebook 视频 URL
- react-native - React Native 的 NetInfo 在 iOS 和 Android 上的不同行为