2017-07-02 10 views
1

永続データベースとしてMongoDBを持つノードを持つRESTサーバーを実装しています。

コレクションにランダムなドキュメントを返すGET操作を実装したいと思いますが、$ sample(集約)メソッドを実装すると、すべてのドキュメントを返すfind({})を実装しているかのように動作します。

これはインクルードがserver.jsファイルの一部を必要とする私のserver.jsファイルに

app.get("/api/contacts", function(req, res) { 

    //GET: find a random contact 
    db.collection(CONTACTS_COLLECTION).aggregate(
    { $sample: { size: 1 } }).toArray(function(err, docs) { 
    if (err) { 
     handleError(res, err.message, "Failed to get contacts."); 
    } else { 
     res.status(200).json(docs);  
    } 
    }); 

}); 

を使用してコード - 私でこれです:

var express = require("express"); 
var bodyParser = require("body-parser"); 
var mongodb = require("mongodb"); 
var ObjectID = mongodb.ObjectID; 

var CONTACTS_COLLECTION = "contacts"; 

var app = express(); 
app.use(bodyParser.json()); 

私はバージョン使用する:

  • OS Windowsの8.1
  • ノードv6.11.0
  • 3.10.10
  • MongoDBの3.2.13(MLABからクラウドDB)

追加情報を表明:Mongoboosterでデータベースに接続しようとした場合クライアントと実行します。

db.contacts.aggregate(
    [ { $sample: { size: 1 } } ] 
) 

をそれはOK発見とランダム文書を返す動作しますが、REST操作で、それがうまく機能していないので、任意の追加的な再がありますこの場合の制限?

+1

集計関数は配列を取るべきではないのですか?それでは:db.collection(CONTACTS_COLLECTION)。集合([{$ sample:{size:1}}) – benjiman

+0

@benjimanさん、ありがとう、間違いでした。答えとしてあなたのコメントを入れてください。私はあなたを解決策として評価することができます。 –

+0

ようこそ。私はちょうど私の答えを掲載した。お役に立てて嬉しいです :) – benjiman

答えて

1

Aggregateは引数の配列を入力として受け取ります。 $sampleコマンドを配列に入れるのを忘れてしまった:

db.collection(CONTACTS_COLLECTION).aggregate([{ $sample: { size: 1 }}]).toArray(); 
関連する問題