我有一个对象任务,它用键引用另一个对象Position _p_position
。
任务对象如下所示:
{
_id: "ijjn97678",
_p_position: "Position$qwerty123",
...
}
位置对象如下所示:
{
_id: "qwerty123",
...
}
我不知道它是Mongo还是Parse约定,但是正如人们可以看到的那样,Position$
在任务的关系位置属性中添加了一个。
我想将两者聚合到一个对象中,以获得类似于以下内容的结果:
{
_id: "ijjn97678",
_p_position: "Position$qwerty123",
positions: [
{
_id: "qwerty123"
}
]
}
使用:
missions.aggregate([
{
$lookup: {
as: "position",
from: "Position",
foreignField: "_id",
localField: "_p_position",
},
},
])
但我需要删除Position$
的_p_position
。"_p_position"
在用于查找匹配的Position的ID之前,有什么方法可以计算?PS:我只有DB的阅读权限
您可以使用$ addFields添加另一个字段,然后将其传递到$lookup
舞台。要获得跟随美元符号的部分,您需要:$ indexOfBytes和$ substr运算符。另外,美元符号本身是Aggregation Framework中的特殊字符(代表字段引用),因此您需要$ literal才能将其视为常规字段
db.missions.aggregate([
{
$addFields: {
value: {
$let: {
vars: { index: { $indexOfBytes: [ "$_p_position", { $literal: "$" } ] } },
in: { $substr: [ "$_p_position", { $add: [ "$$index", 1 ] } , { $strLenBytes: "$_p_position" } ] }
}
}
}
},
{
$lookup: {
from: "Position",
localField: "value",
foreignField: "_id",
as: "position"
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句