2017-04-24 111 views
1
db.audiofiles.aggregate({ 
    $match: { 
     privacy: { $ne: "same" }, 
     date: { "$eq": "2017/04/25" }, 
     deleted: 0 
    }, 
    $group: { "_id": "$to_email" } 
}); 

我已經使用$match,但它仍然顯示管道錯誤如下。集合管道拋出錯誤「一個管道階段規範對象必須只包含一個字段。」

assert: command failed: { 
    "ok" : 0, 
    "errmsg" : "A pipeline stage specification object must contain exactly one field.", 
    "code" : 16435 
} : aggregate failed 
+0

流水線是一個數組。在括號之間添加方括號。 –

+0

db.audiofiles.aggregate({[$ match:{privacy:{$ ne:「same」},date:{「$ eq」:「2017/04/25」},deleted:0]},$ group: { 「_id」: 「$ to_email」}); 得到錯誤 - > 2017-04-24T14:46:37.021 + 0530 E QUERY [thread1] SyntaxError:missing]在計算屬性名稱@(shell):1:32 – Jagadeesh

回答

3

您需要將流水線階段放置在array之間,即文檔按順序通過階段。

db.collection.aggregate([ { <stage> }, ... ]) 

$group管道運營商的步驟應該是自己的對象/文件中,並不像$match流水線步驟的一部分。你總管道應該

db.audiofiles.aggregate([ 
    /* match pipeline */ 
    { 
     "$match": { 
      "privacy": { "$ne": "same" }, 
      "date": { "$eq": "2017/04/25" }, 
      "deleted": 0 
     } 
    }, 
    /* group pipeline */ 
    { 
     "$group": { 
      "_id": "$to_email", 
      "count": { "$sum": 1 } 
     } 
    } 
]); 

或創建管道的步驟對象變量,你可以推到一個數組,該數組成爲管道爲aggregate()方法參數的使用方法:

/* match pipeline */ 
var match = { 
    $match: { 
     privacy: { $ne: "same" }, 
     date: { "$eq": "2017/04/25" }, 
     deleted: 0 
    } 
}, 
/* group pipeline */ 
group = { 
    $group: { 
     "_id": "$to_email", 
     "count": { "$sum": 1 } 
    } 
}; 

db.audiofiles.aggregate([match, group]); 

如果你沒有從上面得到任何迴應,那麼嘗試只用一步來運行聚合管線:

db.audiofiles.aggregate([match]); 

匹配步驟的結果將傳送到下一個階段,因此如果您沒有收到任何結果,則表示$match流水線步驟未找到任何匹配的文檔。更改一些參數以查看是否有任何結果。

+0

我沒有得到任何響應輸入上述查詢在我的mongo終端? – Jagadeesh

+0

然後它意味着你的'$ match'管道沒有返回任何匹配,或者你正在錯誤的集合上運行集合操作。用'$ match'管道來嘗試不同的參數以進行調試,或者使用'$ group'步驟來運行管道,並查看它是否返回任何文檔。 – chridam

+0

audiofiles.aggregate({$ group:{「_ id」:「$ to_email」}}); 如果我輸入上述查詢,我​​從我的收藏中獲取記錄。 audiofiles.find({privacy:{$ ne:「same」},date:{「$ eq」:「24/04/2017」} ,刪除:0}})。 如果我鍵入上面的查詢,我得到一組響應.. – Jagadeesh

相關問題