2013-06-08 2 views
0

Я работаю над API с MongoDB + Express + Node.js. Пока что так хорошо, я могу запросить одну запись по ID, я могу запросить конкретное поле, удалить, добавить и т. Д.гибкий метод запроса/функция для MongoDB + Express с использованием NodeJs

Я ищу метод, который можно вызвать для создания общего запроса для mongoDB, где я передам ему json-представление модели с «некоторыми» данными для поиска. Если поле не указано в объекте json, оно будет искать только те указанные поля.

Вот код шаблона, который у меня был, но я очень новичок в JavaScript и узле, и мне кажется, что мне нужно разобрать или обработать объект запроса перед запуском метода .find.

В основном я хочу иметь возможность выполнить запрос, аналогичный тому, как это делается на parse.com, где вы отправляете объектную модель с данными, которые хотите найти, и получаете все результаты, которые соответствуют.

Любая помощь была бы принята с благодарностью!

--This код в моем обычае module--

exports.findByQuery = function(req, res) { 
    var query = req.query; 
    db.collection('artists', function(err, collection) { 
      collection.find(query).toArray(function(err, docs) { 
      res.send(docs); 
     }); 
    }); 
}; 

--This это маршруты file--

var express = require('express'), 
    artist = require('./routes/artists'); 

var app = express(); 

app.configure(function() { 
    app.use(express.logger('dev'));  /* 'default', 'short', 'tiny', 'dev' */ 
    app.use(express.bodyParser()); 
}); 

app.get('/search/', artist.findByQuery); 
app.get('/artist/:id', artist.findById); 
app.post('/artist', artist.addArtist); 
app.put('/artist/:id', artist.updateArtist); 
app.delete('/artist/:id', artist.deleteArtist); 

app.listen(3000); 
+0

Трудно сказать, что здесь действительно задают. Для простых случаев использования похоже, что код, который у вас здесь, будет работать. Вы сталкиваетесь с проблемами? У вас есть более конкретный вопрос? –

+0

Спасибо, Брет. Это возвращает все документы в базе данных, а не запрос, который я запрашиваю. Если заменить (запрос) на фактический объект напрямую (как в {поле: значение}, я получаю правильный возврат запроса. Похоже, объект передается, так как запрос не нравится методу find (экспресс-метод). –

+0

Это общеизвестно как «запрос по примеру». Должно быть достаточно ссылок, которые нужно найти. –

ответ

0

Я просто обнаружил, что приведенный выше код работает, однако вы не может найти _id по какой-то причине .. Но любое другое поле будет работать. Все еще смотрят, как включить _id в поиск.

+0

Причина в том, что _id является представлением BSON (двоичное), если идентификатор не является строкой ... Поэтому в моем фактическом методе я выполняю интроспекцию, проверяя, является ли запрос для ObjectID, и в этом случае I конвертировать строку из json-запроса в BSON и затем искать ее. –