【发布时间】:2013-06-08 02:27:57
【问题描述】:
我正在使用 MongoDB+Express+Node.js 开发 API。到目前为止一切顺利,我可以通过ID查询一条记录,我可以查询特定字段,删除,添加等。
我正在寻找一种可以调用的方法来为 mongoDB 创建通用查询,我将在其中将模型的 json 表示传递给它,其中包含要搜索的“一些”数据。如果 json 对象中没有指定该字段,那么它只会搜索指定的那些字段。
这是我已经完成的样板代码,但我对 JavaScript 和 Node 非常陌生,我认为我需要在运行 .find 方法之前解析或清理查询对象。
基本上,我希望能够执行类似于在 parse.com 中完成的查询,在 parse.com 中发送包含要搜索的数据的对象模型,并获得所有匹配的结果。
任何帮助将不胜感激!
--此代码在我的自定义模块中--
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);
});
});
};
--这是路由文件--
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);
【问题讨论】:
-
很难说出这里真正要问的是什么。对于简单的用例,您在此处的代码似乎可以工作。你遇到问题了吗?您有更具体的问题吗?
-
谢谢布雷特。这将返回数据库中的所有文档,而不是我要求的查询。如果直接用实际对象替换 (query) 变量(如在 {field:value} 中,我会得到正确的查询返回。看起来传递的对象是由于 find 方法(express 方法)不喜欢查询而传递的。
-
这通常被称为“示例查询”。应该有足够的参考资料。
-
我明白了。但我猜我的问题与查询对象如何传递给 find 方法有关。任何更多细节将不胜感激。