2015-03-31 45 views
0

我很難得到此代碼的工作。我有一個聚合查詢mongo數據庫女巫我做了一些內部操作。沒有$ ifNull操作符的查詢工作正常,但即時通訊獲得一些空值,我不想打印。我已閱讀$ ifNull操作符的文檔,但我無法獲得此代碼的工作。我有這樣的代碼,到目前爲止,女巫給我這個錯誤:如何更改使用MongoDB的聚合中的空值

SyntaxError: Unexpected token : 

我認爲這是「:」從IFNULL,但我不知道爲什麼。我正在關注官方網站上的文檔中的sintax。我也試圖使用另一個項目字段來過濾空值,但它沒有奏效。 這也是迄今爲止德查詢:

db.cleandrivers.aggregate(
[ 
{ 
    $project : 
     { _id:"$_id", 
     week : {$week : "$recruiter.date"}, 
     dif: { 
       $ifNull: [$divide : [{$subtract : ["$personal.stat.first_inspected","$recruiter.date"]} , 1000 * 60 * 60 ], "0"] 
      } 
     } 
}, { $match : { week: 11 } } 
]) 

編輯:一切正常,這是實際工作計數招募PPL的特定周給人的查詢。

db.cleandrivers.aggregate(
    ... [ 
    ... { 
    ... $project : 
    ... { _id:"$_id", 
    ...  week : {$week : "$personal.stat.recruited"} 
    ... } 
    ... }, 
    ... { $match : { $and: [ {week: 10}] } }, 
    ... {$group: { _id: "Sum",sum: {$sum : 1}}} ]) 

輸出:

{ "_id" : "Sum", "sum" : 199 } 

這是我的文檔sintax:

"personal" : { 
        "stat" : { 
          "recruited" : ISODate("2015-02-02T14:30:32.089Z"), 
          "first_inspected" : ISODate("2015-02-02T14:33:15.956Z"), 
          "targo" : ISODate("2015-02-06T17:51:00.672Z") 
        } 

的問題是,當我使用,我用同樣的查詢時,我試圖算招募它給我一個錯誤,因爲有一些文件沒有這個字段。我真的很困惑,我該如何篩選所有文檔中first_inspected字段的文檔,並將它們統計爲一週。 錯誤發生在$周線女巫試圖將空日期轉換爲一週,它給了我一個錯誤。

回答

6

我重新格式化和修補的語法錯誤:

db.cleandrivers.aggregate([ 
    { "$project" : { 
     "_id" : "$_id", 
     "week" : { "$week" : "$recruiter.date" }, 
     "dif" : { 
      "$ifNull" : [{ "$divide" : [{ "$subtract" : ["$personal.stat.first_inspected", "$recruiter.date"] }, 1000 * 60 * 60 ] }, "0"] 
     } 
    } }, 
    { "$match" : { "week" : 11 } } 
]) 

的問題是,你沒有一個對象內部$divide表達,所以它像

[ "$divide" : stuff, more, stuff] 

,而不是

[{ "$divide" : stuff }, more, stuff] 

我不能幫你得到聚合返回你w螞蟻,因爲我不知道你在找什麼。如果您需要更多幫助,您是否可以編輯問題以包含示例文檔以及您想從中獲得的結果的描述?

+0

我編輯我的問題,添加我的實際錯誤的一些細節。我遇到了一些文檔在日期字段上有空值的問題,我不能聚合它們。 (我想排除和計算只存在於特定字段中的那些) – Giuseppe 2015-04-01 17:32:44

+0

我錯誤地編輯了您的答案,您是否可以刪除我的編輯以便其他人可以看到您的答案? – Giuseppe 2015-04-01 17:40:43