Я реализую сервер 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());
Версии, которые я использую:
Дополнительная информация: Если вы пытаетесь подключиться к базе данных с клиентом Mongobooster и запускать:
db.contacts.aggregate(
[ { $sample: { size: 1 } } ]
)
Он работает нормально, обнаруживая и возвращая случайный документ, но в REST-операции он работает не так, как есть дополнительное ограничение в этом случае?
Агрегат принимает массив аргументов по мере ввода. Вы забыли поместить команду $sample
в массив:
db.collection(CONTACTS_COLLECTION).aggregate([{ $sample: { size: 1 }}]).toArray();