mongodb aggregate" $ _ id"将id作为字符串而不是对象返回

时间:2018-01-14 10:30:37

标签: javascript mongodb aggregate

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")) }
},

1 个答案:

答案 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