【发布时间】:2017-07-02 20:19:48
【问题描述】:
我正在使用 MongoDB 作为持久性数据库的节点来实现一个 REST 服务器。
我想实现一个返回集合中随机文档的 GET 操作,但是当我实现 $sample(聚合)方法时,它就像我在实现一个返回所有文档的 find({}) 一样工作。
这是我在 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);
}
});
});
server.js 文件的 require 部分是这样的:
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());
我使用的版本是:
- 操作系统Windows 8.1
- 节点 v6.11.0
- 快递 3.10.10
- mongodb 3.2.13(来自 mlab 的云数据库)
附加信息:如果尝试使用 Mongobooster 客户端连接到数据库并运行:
db.contacts.aggregate(
[ { $sample: { size: 1 } } ]
)
找到并返回一个随机文档可以正常工作,但是在 REST 操作中它不能正常工作,那么在这种情况下是否有任何额外的限制?
【问题讨论】:
-
聚合函数不应该带一个数组吗?所以: db.collection(CONTACTS_COLLECTION).aggregate([{ $sample: { size: 1 }}])
-
谢谢@benjiman,这是个错误,现在运行良好。请将您的评论作为答案,以便我将您评为解决方案。
-
欢迎您。我刚刚发布了我的答案。很高兴我能帮忙:)
标签: javascript node.js mongodb rest express