使用正则表达式从Mongodb中检索多个数据

时间:2018-06-13 13:58:00

标签: node.js regex mongodb mongoose

我是Mongodb的新手

这是我尝试过的。不过这种方法对我有用,但速度很慢。 是否可以设计单个查询来获取所有这些数据。而不是一个一个地查询。

 var Schema = mongoose.Schema;// Schema
 var dataModelSchema = new Schema({
data: String,
});

var fdevices = mongoose.model('fdevices', dataModelSchema);
var DPMPow = fdevices.findOne({ "Data": { $regex: /DPMPow_P01/i } }).sort({ 
field: 'asc', _id: -1 }); //Active Power 
var DPMAmp = fdevices.findOne({ "Data": { $regex: /DPMAmp_P01/i } }).sort({ 
field: 'asc', _id: -1 });//Total Current
var DPMkWh = fdevices.findOne({ "Data": { $regex: /DPMkWh_P01/i } }).sort({ 
field: 'asc', _id: -1 });//Consumption
var MxPeak = fdevices.findOne({ "Data": { $regex: /MxPeak_P01/i } }).sort({ 
field: 'asc', _id: -1 });//Max Demand Peak
var MPPeak = fdevices.findOne({ "Data": { $regex: /MPPeak_P01/i } }).sort({ 
field: 'asc', _id: -1 });//Max Demand Partial

   async.series([
    function (callback) {
        DPMPow.exec(function (err, res) {
            callback(null, res);
        })
    },
    function (callback) {
        DPMAmp.exec(function (err, res) {
            callback(null, res);
        });
    },
    function (callback) {
        DPMkWh.exec(function (err, res) {
            callback(null, res);
        })

    },
    function (callback) {
        MxPeak.exec(function (err, res) {
            callback(null, res);
        })

    }, function (callback) {
        MPPeak.exec(function (err, res) {
            callback(null, res);
        })
        //chiller1
    }
 ], function (err, results) {
           console.log(results);
 });

这就是我的数据在数据库中的样子。在集合中只有一个字段,其名称为'数据'该字段每隔一小时就会收到多个传感器数据。

 { _id: 5b2118c4ae33249711a498a6,
  Data: '13-06-2018 20:14:46 DPMPow_P01_04_ 699.15 ',
  __v: 0 },
  { _id: 5b2118c4ae35439711a498a6,
  Data: '13-06-2018 20:14:46 MPPeak_P01_04_ 699.15 ',
  __v: 0 },
  { _id: 5b23428c4ae32989711a498a6,
   Data: '13-06-2018 20:14:46 DPMAmp_P01_04_ 699.15 ',
  __v: 0 },
    { _id: 5b21234c4ae32989711a498a6,
    Data: '13-06-2018 20:14:46 DPMkWh_P01_04_ 699.15 ',
   __v: 0 },
  { _id: 5b2118c4ae34989711a598a6,
    Data: '13-06-2018 20:14:46 MxPeak_P01_04_ 699.15 ',
  __v: 0 }

1 个答案:

答案 0 :(得分:0)

您可以在查找查询

中尝试以下RegEx
let data = fdevices.find({ "Data": { $regex: /(DPMPow)|(MPPeak)|(DPMAmp)|(DPMkWh)| 
  (MxPeak)/gm } }).sort({ field: 'asc', _id: -1 });