2016-11-01 6 views
0

aggregateを使用していますが、TypeError: users.aggregate is not a functionを使用してコレクションをクエリしようとしています。ここに私のコードは次のとおりです(合わせて縮小)MongoDB - TypeError:users.aggregateは関数ではありません

./app.js

var express = require('express'); 
var mongo = require('mongodb'); 
var monk = require('monk'); 
var db = monk('localhost:27017/mydb'); 
var users = require('./routes/users'); 
var app = express(); 

app.use(function(req, res, next) { 
    req.db = db; 
    next(); 
}); 

app.use('/users', users); 
module.exports = app; 

./routes/users.js

var express = require('express'); 
var router = express.Router(); 

router.get('/test', function(req, res) { 
    var users = req.db.get('users'); 

    users.aggregate([{ $match: { username: 'test0' }}], function(err, data) { 
    res.json(data); 
    }); 
}); 

module.exports = router; 

私はMongoDBのバージョン3.2を実行しています.10と上記のクエリは、コンソールで正常に動作します。私は解決策を探してきましたが、私がすでに行ったMongoDBのバージョンを確認することをお勧めします。私もreq.db.collection('users').aggregate(別の投稿で示唆されているように)を試してみましたが、同様のエラーが表示されます:req.db.collection is not a function私は何が欠けていますか?

編集: users.find({ username: 'test0' }, func...を実行すると、正しいデータが返されます。

EDIT2:コードを追加しました。

+0

「req.db.get」のどこからですか?あなたはそれを輸出していますか? –

+0

mongodbへの接続にはどのライブラリを使用していますか? – QoP

+0

@QoPモンクを使用しています – TestWell

答えて

0

このようにすることができます。

var app = require('express')(); 
var expressMongoDb = require('express-mongo-db'); 

app.use(expressMongoDb('mongodb://localhost/test')); 

app.get('/', function (req, res, next) { 
    req.db // => Db object 
}); 
+0

私はデータベースを返す'req.db.get( 'users')'私は 'find()'、 'findOne()'、 'update()'、 'insert()'することができますが、 'aggregate'は失敗しています。 – TestWell

0

私はこれを試しました。私の地元で働いています。

var app = require('express')(); 

const db = require('monk')('localhost/test') 

app.use(function(req,res,next){ 
req.db = db; 
next(); 
}); 

app.get('/', function (req, res, next) { 
    var db = req.db; 
    var users = db.get('users'); 

    users.aggregate([ 
    {$match: { firstName: 'Test 2' }} 
    ]).then(function(docs) { 
    console.log(docs) 
    }) 
}); 

app.listen(3010, function() { 
    console.log('Example app listening on port 3010!'); 
}); 
+0

あなたのお時間をいただき、ありがとうございますが、具体的には集計で修道士の図書館の問題を検索した後に答えを見つけました。それはサポートされていないことが判明し、usersコレクションを 'users.col.aggregate()'と一緒に使用する必要がありました。 – TestWell

関連する問題