使用nodejs在整个集合(mongodb)中搜索

Posted

技术标签:

【中文标题】使用nodejs在整个集合(mongodb)中搜索【英文标题】:Search in whole collection(mongodb) using nodejs 【发布时间】:2016-09-04 10:45:55 【问题描述】:

我想使用 Nodejs 在 Mongodb 集合中实现整个搜索功能。 我应该将什么传递给SaleModel.find(),以便在整个集合中进行值搜索?

这是我尝试过的,但它只搜索 product_name,我也想搜索 sale_amount、sale_person、department_name。

我该怎么做?

SaleModel.find('product_name': 'searched value');

架构:

var saleSchema = mongoose.Schema(
    product_name: type:String, required:true,
    sale_amount: type:Number, required:true ,
    sale_date: type:Date, default:Date() ,
    sale_person: type:String, required:true , 
    department: type:mongoose.Schema.Types.ObjectId, ref:'department' ,
);
module.exports = mongoose.model('sale', saleSchema);

【问题讨论】:

阅读有关快递路线的文档,您的 list 功能完全混乱且不正确 也显示路由器,如果Models.SaleModel 是猫鼬模型,猫鼬不支持承诺 awaik,只支持回调 为什么要返回匹配数据的总数,以及总数据。总数据的长度本身就是计数。 给出一些理由,为什么要关闭投票?你无法理解这个问题吗?或者问题与编程无关? 请将问题中的代码恢复为您首次发布时的状态。当您更改最初发布的代码时,您会将问题更改为新的不同问题,从而使迄今为止收到的答案完全脱离上下文。这不是这个网站应该如何运作的。如果您需要传达额外的代码,那么您可以在之后添加它。在这种特殊情况下,您不需要显示您尝试过的代码,因为答案中已经涵盖了这些代码。您可以添加一条您尝试过该建议的评论并解释您观察到的内容。 【参考方案1】:

我会写得更干净,下面的示例使用async.parallelPromiseMongoose.Query

function list(req) 

    // promise or callback works as well
    return new Promise(function(resolve, reject)

        // npm install async --save
        var async = require('async'); 

        // some validation can be applied
        var page = 
            skip: req.query.start || 1,
            limit: req.query.length || 25,
            text: req.query.search || ''      // <== this is new property!
        ;

        // reuse Mongoose.Query with search by regex
        var Query = Models.SaleModel.find(
            product_name: new RegExp(page.text, "i")
        );

        // run without waiting until the previous function has completed
        async.parallel([
            function()
                Query.count(callback); // <== count
            ,
            function()
                Query.skip(page.skip).limit(page.limit).exec('find', callback); // <== items
                // or the below one should also work, just don't remember
                // Query.skip(page.skip).limit(page.limit).exec(callback);
            
        ]), function(err, results)
            if(err)
                reject(err);
             else 
                resolve(
                    count: results[0],
                    data: results[1]
                );
            
        );
    );

【讨论】:

已更新,请记住,切勿大幅更改问题,您删除了 1000 个符号 这个怎么样? SaleModel.find($text: $search: searchString); 这需要对架构进行索引,这是更健壮的方式,但我仍然想展示最简单的方式

以上是关于使用nodejs在整个集合(mongodb)中搜索的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用一个关键字搜索 MongoDB 集合中的所有键

为啥我应该在 MongoDB 中使用 NodeJS 在会话案例中搜索用户?

从nodejs中mongodb的两个不同集合中获取数据

从nodejs中mongodb的两个不同集合中获取数据

nodejs-native-mongodb 的 runCommand 等效项

如何在不指定字段名称的情况下使用 mongodb 在 nodejs 中进行部分数据搜索? [复制]