我使用 mongoosejs 与 nodejs 和表达,我在搜索多个引用字段时遇到问题。
我有三个架构如下。
var CompanySchema = mongoose.Schema({
name: {type: "String"},
category: {type:"String", ref: "CompanyCategory"},
_id: {type: "String"},
companyProfile: {
logo: {type:"String"},
address: {type:"String"},
website: {type:"String"},
email: {type: "String"},
ceo: {type:"String"}
}
......
员工
var EmployeeSchema = mongoose.Schema({
name: { type: "String" },
company: {type: "String", required:true, ref: "Company"},
contact: {
address: {type: "String"},
phone: [],
website: {type: "String"}
}
.......
});
事件
var EventSchema = mongoose.Schema({
title: {type: String},
company: {type: "String", required:true, ref: "Company"},
contactPerson: {type: mongoose.Schema.Types.ObjectId, ref: "Employee"},
category: {type: "String", required:true},
date: {type: "Date"},
agenda: {type: "String"},
......
});
我正在使用JQuery Datables(https://datatables.net/)和需要实现一个输入搜索功能(例如: https://datatables.net/examples/data_sources/ajax.html )用于事件列表页面。我花了很多时间寻找解决方案而没有运气。大多数答案都是在填充上查询条件,但在填充 strong>后我需要 $或条件结果。
下面的内容适用于没有引用的架构:
if ( req.query.search.value ){
var searchValue = req.query.search.value;
query.$or = [
{ company.name: new RegExp(searchValue , 'i') },
{ contactPerson.name: new RegExp(searchValue, 'i') },
{ status: new RegExp(searchValue, 'i') },
{ venue: new RegExp(searchValue, 'i') },
{ agenda: new RegExp(searchValue, 'i') }
];
}
有没有好的高效解决方案,还是需要更改架构?我想到了嵌入式架构,但如果员工更改了他的详细信息,那么我需要更新所有嵌入式架构和员工的更改,公司在大多数馆藏中被引用。
填充后, company.name
和contactPerson.name
是结果。我试过populate().find() , populate().where()
但似乎没有任何效果。任何帮助和指导都会有所帮助。谢谢。