mongodb aggregate" $ _ id"将id作为字符串而不是objectID返回。 当我发送" $ _ id"对于函数的文档,聚合不能比较objectID和string。查询如下(返回空):
db.getCollection('general.users').aggregate([
{
$match: { _id: ObjectId("5a48894e4639fa6d7703c4f4") }
},
{
$addFields: { creadit: fetchUserCreadit("$_id") }
},
])
这是我的一些功能:
const succPays = db.financial.successpayrequests.aggregate([
{
$match:
{
$and:
[
{
userID: uid
}
]
}
},
{
$group:
{
_id: null,
amountSum: { $sum: '$amount' }
}
}
]).toArray();
return succPays;
当我在硬编码中发送param时,每个东西都可以,因为param作为对象发送(返回非空数组)。
db.getCollection('general.users').aggregate([
{
$match: { _id: ObjectId("5a48894e4639fa6d7703c4f4") }
},
{
$addFields: { creadit: fetchUserCreadit(ObjectId("5a48894e4639fa6d7703c4f4")) }
},
答案 0 :(得分:0)
问题是封闭函数的执行顺序。 Javascript正在调用int j = 0, k = 12;
long long int mult = 1;
long long int max = 0;
char *digits = /*Big number*/
while(k < 1000){
for (int i = j; i <= k; ++i)
{
/* code */
long long int val = digits[i] -'0';
/* check if any number in series contains 0 */
if(val == 0){
break;
}
mult = mult * val;
}
printf("mult is %lld\n",mult );
/* check for max value */
if(max < mult){
max = mult;
}
printf("the new max is %lld\n", max);
j += 1;
k += 1;
mult = 1;
printf("%d iteration finished\n", k);
}
printf("%lld\n", max);
之前,它会组装fetchUserCreadit
表达式,并将完全烘焙的管道传递到$addFields
。 Javascript看到db.foo.aggregate()
并将其作为字符串发送;它对MongoDB一无所知,实际上,在这一点上,甚至没有管道在运行。这是一个紧凑但类似的问题演示。
$_id