Mongo $ sample (aggregation) не работает внутри GEToperation на сервере REST узла

1

Я реализую сервер REST с узлом с MongoDB в качестве базы данных сохранения.

Я хотел бы реализовать операцию GET, которая возвращает случайный документ в коллекции, но когда я реализую метод $ sample (aggregation), он работает так, как будто я реализую 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 является следующее:

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 (облако db от mlab)

Дополнительная информация: Если вы пытаетесь подключиться к базе данных с клиентом Mongobooster и запускать:

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

Он работает нормально, обнаруживая и возвращая случайный документ, но в REST-операции он работает не так, как есть дополнительное ограничение в этом случае?

  • 1
    Разве агрегатная функция не должна принимать массив? Итак: db.collection (CONTACTS_COLLECTION) .aggregate ([{$ sample: {size: 1}}])
  • 0
    Спасибо @benjiman, это была ошибка, и теперь она работает хорошо. Пожалуйста, оставьте свой комментарий в качестве ответа, чтобы я мог оценить вас как решение.
Показать ещё 1 комментарий
Теги:
express
rest

1 ответ

1
Лучший ответ

Агрегат принимает массив аргументов по мере ввода. Вы забыли поместить команду $sample в массив:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню