在节点REST服务器中,Mongo $ sample(聚合)在GET操作中不起作用

我正在使用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
  • expression3.10.10
  • mongodb 3.2.13(来自mlab的云数据库)

附加信息 :如果尝试使用Mongobooster客户端连接到数据库并运行:

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

它工作正常发现和返回一个随机的文件,但在REST操作它不能正常工作,所以在这种情况下有任何额外的限制?

在input时,Aggregate接受一个参数数组。 你忘了把你的$sample命令放到一个数组中:

 db.collection(CONTACTS_COLLECTION).aggregate([{ $sample: { size: 1 }}]).toArray();