mongodb - 从子数组中的 DBRef 获取 ObjectId
问题描述
我的收藏:
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": [
{
"field1": "{\"$ref\": \"otherCollection\", \"$id\": \"...\", \"$db\": \"sameDataTable\"}", // string
// .. some other fields
}
]
},
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": []
}
我想做$lookup
,otherCollection
但首先我需要从field1
字符串中获取 ObjectId mySubArray
。
我试图做的是在里面选择$arrayElemAt
这个$map
ObjectId $project
:
[
{
"$match" : {
// my match
},
{
"$project": {
"its": {
"$map": {
"input": {
"$map": {
"input": "$mySubArray",
"as": "element",
"in": {
"field1": {
"$arrayElemAt": [
{
"$objectToArray": "$element.field1"
},
1
]
}
},
}
},
"in": "$$this.v"
}
}
}
}/*,
{
$lookup: {
from:"otherCollection",
localField:"mySubArray.id",
foreignField:"_id",
as:"mySubArray.myNewField"
}
}*/
]
所以它看起来像这样:
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": [
{
"field1": "{\"$ref\": \"otherCollection\", \"$id\": \"...\", \"$db\": \"sameDataTable\"}", // string
"myNewFiled": {
//my new object that i get with $lookup
}
// .. some other fields
}
]
},
{
"_id": ObjectId("..."),
// .. some fields
"mySubArray": []
}
但我得到的是没有其他字段_id
,但mySubArray
里面有 null:
{
"_id" : ObjectId("..."),
"mySubArray" : [
null
]
}
解决方案
致@turrivishal @d-sm
问题是我无法控制推送到数据库,我只需要从中读取数据。
顺便说一句,我找到了方法:
$unwind
我的子数组$addFileds
从字符串中$regexFind
获取$id
$unwind
正则表达式捕获(因为我获取一组)$addFields
用于将正则表达式字符串结果转换为ObjectId
$lookup
$unwind
查找结果(因为它是数组,即使我查找一个对象)$group
mySubArray 返回
推荐阅读
- django - 在 Django 数据库中保存表示图像的 Base64 字符串
- typescript - 如何在 typescript 中声明一个类,就像使用“class”关键字一样?
- c++ - 为什么 round() 让我的表达给出错误的答案?
- reactjs - 使用 react-table-6 从 json 递归创建嵌套表
- keycloak - 使用 keycloak OIDC [SSL: CERTIFICATE_VERIFY_FAILED] 打开 edx
- css - 用 sass 更改 Bootstrap 5 颜色,但指定互补色
- php - 是否可以在使用 PHP 更新 cookie 后获得新值,而无需刷新屏幕?
- iframe - 跟踪 iframe 来源
- c# - LiteDb.Engine.PageBuffer 内存泄漏
- powershell - 使用 Powershell 解析 html 标签链接