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操作で、それがうまく機能していないので、任意の追加的な再がありますこの場合の制限?
集計関数は配列を取るべきではないのですか?それでは:db.collection(CONTACTS_COLLECTION)。集合([{$ sample:{size:1}}) – benjiman
@benjimanさん、ありがとう、間違いでした。答えとしてあなたのコメントを入れてください。私はあなたを解決策として評価することができます。 –
ようこそ。私はちょうど私の答えを掲載した。お役に立てて嬉しいです :) – benjiman