使用填充

时间:2016-05-25 17:20:33

标签: node.js mongodb mongoose datatables mongoose-populate

我使用 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 )用于事件列表页面。我花了很多时间寻找解决方案而没有运气。大多数答案都是在填充上查询条件,但在填充后我需要 $或条件结果。

下面的内容适用于没有引用的架构:

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.namecontactPerson.name是结果。我试过populate().find() , populate().where()但似乎没有任何效果。任何帮助和指导都会有所帮助。谢谢。

0 个答案:

没有答案