Node.js 有搜索字符串和没有搜索字符串的datatable的Mongodb查询可以是什么

Node.js 有搜索字符串和没有搜索字符串的datatable的Mongodb查询可以是什么,node.js,mongodb,datatables,mongodb-query,Node.js,Mongodb,Datatables,Mongodb Query,我将服务器端数据表与带有搜索字段的ajax请求一起使用。 我试图使用聚合来获得结果,但没有正确地获得结果 我在数据库中有一个包含多个集合的表,每个集合在我的集合中都嵌套了JSON (仅用于模式概述) 上面的JSON有一个userID和emails对象数组,其中一个字段包含另一个对象数组 我想要什么 首先我要选择一个与用户匹配的文档,然后我要获取totalcount的电子邮件数组长度 second如果请求中有搜索字符串,则将该字符串与一些键(数据如下所示)匹配(mongodb$regex),然后返

我将服务器端数据表与带有搜索字段的ajax请求一起使用。 我试图使用聚合来获得结果,但没有正确地获得结果

我在数据库中有一个包含多个集合的表,每个集合在我的集合中都嵌套了JSON

(仅用于模式概述)

上面的JSON有一个userID和emails对象数组,其中一个字段包含另一个对象数组

我想要什么

首先我要选择一个与用户匹配的文档,然后我要获取totalcount的电子邮件数组长度 second如果请求中有搜索字符串,则将该字符串与一些键(数据如下所示)匹配(mongodb$regex),然后返回所有匹配的数据以及所有匹配数据的计数 因此,查询结果如下

var data = {
  "draw": req.body.draw,
  "recordsFiltered": recordsFiltered,
  "recordsTotal": recordsTotal,
  "data": results
}

我尝试的查询如下

var Object_id = req.user._id.toString();
var searchStr = req.body.search.value.toString();
if(req.body.search.value){
    var regex = new RegExp(req.body.search.value.toString())
        searchStr = {user: Object_id, $or: [{'created_on': regex},
        {'server_on': regex },{'sender_name': regex },
        {'email_subject': regex },{'send_to_list.email': regex }]};
      searchStr = {user: Object_id, 'server_on': searchStrVal};
    } else
{ 
searchStr = {user: Object_id}; 
}

db.collection.aggregate([{$match: searchStr}, 
{$project: {count: {$size: '$emails'}}}

]).then(data =>{
  console.log(data);

  }).catch( err => {
    console.log(err);
  })
这不是一个完整的查询,我不知道它会是什么,但当我只传递userID时,我会得到电子邮件数组的长度,但这还不够

我想要电子邮件数组的长度、过滤数据(如果搜索字符串为else all)和要返回的过滤数据的计数

提前感谢,请检查上面给定链接上的实际JSON

var Object_id = req.user._id.toString();
 var searchStr = req.body.search.value.toString();
 let query=[];
if(req.body.search.value){
  query = [{
  "created_on": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}, {
  "server_on": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}, {
  "sender_name": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}, {
  "email_subject": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  },{
  "send_to_list.email": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}]
}

db.collection.find({
    "$and": [{
    "$or": query
  },{
   user: Object_id
  }     
]
}).exec(function(err, result) {
if (err) {
  return res.send(err);
}
 db.collection.find({user: Object_id}).count().exec(function(err, count) {
     res.json({matched_objects:result,totalCount:count});
})
})
var Object_id = req.user._id.toString();
 var searchStr = req.body.search.value.toString();
 let query=[];
if(req.body.search.value){
  query = [{
  "created_on": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}, {
  "server_on": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}, {
  "sender_name": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}, {
  "email_subject": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  },{
  "send_to_list.email": {
    "$regex": "^" + searchStr,
    "$options": "-i"
  }
}]
}

db.collection.find({
    "$and": [{
    "$or": query
  },{
   user: Object_id
  }     
]
}).exec(function(err, result) {
if (err) {
  return res.send(err);
}
 db.collection.find({user: Object_id}).count().exec(function(err, count) {
     res.json({matched_objects:result,totalCount:count});
})
})