使用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.parallel
、Promise 和 Mongoose.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 中使用 NodeJS 在会话案例中搜索用户?