【问题标题】:Mongo $sample (aggregation) not working inside GEToperation in a node REST serverMongo $sample(聚合)在节点 REST 服务器的 GET 操作中不起作用
【发布时间】: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


【解决方案1】:

Aggregate 将参数数组作为输入。您忘记将 $sample 命令放入数组中:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多