Сортировка на стороне сервера с использованием Mongoose (mongodb + node.js) - PullRequest
0 голосов
/ 17 ноября 2011

Я пытаюсь отсортировать на основе функции. В настоящее время я делаю следующее, и это работает.

var _criteria = ... some search criteria
var _pageNumber = ... the page num I want to see
var _nPerPage = ... the number of documents per page
var _sort = {};
_sort.name = ... the column name I am sorting on
_sort.order = ... asc or desc sort

Collection.find(_criteria)
    .skip((_pageNumber-1)*_nPerPage)
    .limit(_nPerPage)
    .sort(_sort.name,_sort.order)
    .execFind(function (err, docs) {
...
});

Теперь я бы хотел отсортировать на основе некоторой функции, которая принимает пользовательский ввод:

var sortFunc = function(x){ return (x - doc.score); }; 
// where doc.score is an attribute of the document I am searching on
//   and x is a user provided value

и я не могу найти способ сделать это. Я попытался оценить эту функцию следующим образом:

var mongoose = require('mongoose');
var mdb = mongoose.connect(uri);
var myfunc = function(x){ return x; };
mdb.connection.db.eval( myfunc, "asdf", function (err, retval) {
    console.log('err: '+err);
    console.log('retval: '+retval);
});

но я получаю следующую ошибку:

err: Error: eval failed: db assertion failure
retval: null

Любая помощь по этому вопросу была бы потрясающей. Большое спасибо

1 Ответ

1 голос
/ 09 января 2012

Я думаю, вам нужно сделать так:

var mongoose = require('mongoose');
mongoose.connect(uri);
mongoose.connection.on("open", function(err){
  mongoose.connection.db.eval("function(x){ return x; }", "asdf", function (err, retval) {
      console.log('err: '+err);
      console.log('retval: '+retval);
  });
});

Это может работать на моем ПК.Вы должны убедиться, что соединение доступно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...