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