【问题标题】:flexible query method/function for MongoDB + Express using NodeJs使用 NodeJs 的 MongoDB + Express 的灵活查询方法/功能
【发布时间】: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 方法有关。任何更多细节将不胜感激。

标签: node.js mongodb express


【解决方案1】:

我刚刚发现上面的代码可以工作,但是由于某种原因你不能搜索 _id。但是任何其他字段都可以工作。仍在寻找如何在搜索中加入 _id。

【讨论】:

  • 原因是,如果 ID 不是字符串,_id 是 BSON(二进制)表示...所以在我的实际方法中,我会进行自省以检查查询是否针对 ObjectID,其中情况下,我将字符串从 json 查询转换为 BSON,然后对其进行搜索。
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 2018-09-09
  • 2019-07-14
  • 2015-07-25
相关资源
最近更新 更多