MongoDB: Коллекция совокупности с $ образца в NodeJS

голоса
0

Я в настоящее время возникают проблемы с агрегацией с реализацией NodeJS игровая агрегата с $ образца.

Запрос я хочу работать с MongoDB является:

db.qmquestions.aggregate({$sample: {size: 1}})

который будет:

{ _id : ObjectId(58bf0f29b6942f2dd471b6cc), question : { questionTitle : Test, question : What is the Capital of England, answer : London } }

Код я пытаюсь использовать это:

var generateQuestion = function(){
    var MongoClient = require('mongodb').MongoClient
    var url = 'mongodb://localhost/quizmaster';

    var results_from_mongo = [];

    MongoClient.connect(url, function (err, db) {
        var str = db.collection('qmquestions').find({}).toArray(function (err,docs){
            //console.log(docs)

            //for (var i = 0, len = docs.length; i < len; i++)
            //{
            var test = db.collection('qmquestions').aggregate(
                {$sample: {size: 1}}
            );

            console.log(test)
                //gameState.currentQuestion = docs[i].question.question
                //console.log(currentQuestion is  + gameState.currentQuestion)
            //}
            return gameState.currentQuestion
        })
    });
};

Но все, что тест возвращается из console.log является (Это лишь фрагмент кода, как это просто возвращает информацию сервера MongoDB):

AggregationCursor {
  pool: null,
  server: null,
  disconnectHandler:
   Store {
     s: { storedOps: [], storeOptions: [Object], topology: [Object] },
     length: [Getter] },
  bson: BSON {},
  ns: 'quizmaster.qmquestions',
  cmd:
   { aggregate: 'qmquestions',
     pipeline: [ [Object] ],
     cursor: { batchSize: 1000 } },
  options:
   { readPreference: ReadPreference { preference: 'primary', tags: undefined, options: [Object] },
     promiseLibrary: [Function: Promise],
     cursorFactory: { [Function: AggregationCursor] super_: [Object], define: [Object], INIT: 0, OPEN: 1, CLOSED: 2 },
     cursor: { batchSize: 1000 },
     disconnectHandler: Store { s: [Object], length: [Getter] } },

Если кто-нибудь может определить, где я буду неправильно, что было бы здорово, как я не могу видеть проблему единственное, что я могу думать о том, что это не нравится агрегацию внутри «вар» ул вызова.

EDIT: Я чувствую, что я не получаю мою проблему через то, что я ищу, когда функция generateQuestion вызывается для того, чтобы заглянуть внутрь коллекции qmQuestions и выбрать случайный результат из этой коллекции, чтобы затем отобразить в тестовой переменной. Эта функция вызывает на нажатие кнопки в форме, которая не показана на вопрос, который не имеет отношения вопроса. Каждый раз, когда вызывается функция случайный результат будет помещен в тестовой переменной.

Задан 09/03/2017 в 16:49
источник пользователем
На других языках...                            


2 ответов

голоса
0

Вы должны выразить трубопровод в виде массива

пытаться

var test = db.collection('qmquestions').aggregate([
            {$sample: {size: 1}}
        ]);
Ответил 06/12/2017 в 20:51
источник пользователем

голоса
0

Преобразовать результат в массив

var test = db.collection('qmquestions').aggregate(
    {$sample: {size: 1}}
).toArray();
Ответил 27/02/2018 в 09:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more