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