我正在尝试在聚合查询中将十六进制字符串转换为其等效的ObjectID。我尝试了两种不同的方法:
db.omvas.aggregate([
{$project:{
EID:{$let: {
vars: {
id: "$EID"
},
in: ObjectId("$$id")
}},
}
},
{$group:{
_id:"$EID"
}
}
]);
和
db.omvas.aggregate([
{$project:{
EID: ObjectId("$EID")
}
},
{$group:{
_id:"$EID"
}
}
]);
我使用任何一种方法都会不断收到错误“错误:无效的对象ID:长度”。我测试了添加文字字符串代替聚合变量,并且得到了带有正确ObjectID的结果。似乎字符串值没有传递给Mongo的ObjectId函数,而是将变量名作为文字字符串传递。
任何人都知道我尝试实现的目标是否可能?我缺少一些魔术吗?
ObjectId
是Shell中ObjectIds的构造函数。当你写类似
"EID" : { "$let" : {
"vars" : { "id" : "$EID" },
"in" : ObjectId("$$id")
} }
mongo shellObjectId("$$id")
在发送聚合请求之前进行评估。就像您在Javascript中调用函数一样
var x = 2
var y = 4
f(x + y) // f(6)
您需要一个聚合运算符将字符串转换为ObjectId。不幸的是,从MongoDB 2.6开始,没有这样的功能。为什么需要转换字符串?你打算怎么办?也许有一种方法可以解决聚合中缺少转换运算符的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句