Node.js MongoDB+;灵活的查询方法/功能;使用NodeJs表示

Node.js MongoDB+;灵活的查询方法/功能;使用NodeJs表示,node.js,mongodb,express,Node.js,Mongodb,Express,我正在使用MongoDB+Express+Node.js开发一个API。到目前为止还不错,我可以通过ID查询一条记录,我可以查询特定字段、删除、添加等 我正在寻找一种方法,可以调用该方法为mongoDB创建一个通用查询,在这里我将向它传递一个模型的json表示,其中包含一些要搜索的数据。如果json对象中没有指定字段,那么它将只搜索指定的字段 这是我已经完成的样板代码,但我对JavaScript和Node非常陌生,我认为在运行.find方法之前需要解析或清理查询对象 基本上,我希望能够执行与pa

我正在使用MongoDB+Express+Node.js开发一个API。到目前为止还不错,我可以通过ID查询一条记录,我可以查询特定字段、删除、添加等

我正在寻找一种方法,可以调用该方法为mongoDB创建一个通用查询,在这里我将向它传递一个模型的json表示,其中包含一些要搜索的数据。如果json对象中没有指定字段,那么它将只搜索指定的字段

这是我已经完成的样板代码,但我对JavaScript和Node非常陌生,我认为在运行.find方法之前需要解析或清理查询对象

基本上,我希望能够执行与parse.com中类似的查询,在parse.com中,您发送一个包含要搜索的数据的对象模型,并获得所有匹配的结果

任何帮助都将不胜感激

--此代码在我的自定义模块中--

--这是路由文件--


我刚刚发现上面的代码确实有效,但是由于某些原因,您无法搜索_id。。但任何其他领域都可以。仍在寻找如何在搜索中加入_id。

很难说这里真正要问的是什么。对于简单的用例,这里的代码似乎可以工作。你遇到问题了吗?你有更具体的问题吗?谢谢Bret。这将返回数据库中的所有文档,而不是我请求的查询。如果直接用实际对象替换(query)变量(如{field:value}),我将得到正确的查询返回。由于find方法(express方法)不喜欢查询,因此看起来传递的对象。这通常称为“示例查询”。应该有足够的引用可供查找。我理解。但我猜我的问题与如何将查询对象传递给find方法有关。如需更多详细信息,将不胜感激。原因是_id是BSON(二进制)如果ID不是字符串,则表示……因此在我的实际方法中,我会进行一次自省,检查查询是否针对ObjectID,在这种情况下,我将字符串从json查询转换为BSON,然后对其进行搜索。
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);