1
我正在實現一個REST服務器與節點與MongoDB作爲持久性數據庫。
我想實現一個GET操作,它返回一個集合中的隨機文檔,但是當我實現$ sample(聚合)方法時,它的工作方式就好像我正在實現一個返回所有文檔的find({})。
這是用我的server.js文件中的代碼i'm
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);
}
});
});
的要求server.js文件的一部分是這樣的:
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 } } ]
)
它的工作原理確定發現並返回一個隨機文件,但在REST操作就無法正常工作,所以沒有任何附加的重在這種情況下的限制?
聚合函數不應該帶數組嗎?所以:db.collection(CONTACTS_COLLECTION).aggregate([{$ sample:{size:1}}]) – benjiman
謝謝@benjiman,這是錯誤的,現在運行良好。請把你的評論作爲答案,我可以評價你的解決方案。 –
歡迎您。我剛剛發佈了我的答案。很高興我能幫上忙 :) – benjiman