Mongo / Mongoose Aggregate()$ match运算符不像find()查询那样查询

时间:2018-07-12 15:27:22

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

根据mongo doc [$match (aggregation)]:

  

$ match使用一个指定查询条件的文档。查询语法与读取操作查询语法相同。

但是,当我在mongo中执行以下两个查询时,它不起作用。

第一个:

var Q = Activity.find(condition);
Q.exec(function(err, docs) {
  console.log(docs);
})

第二,

var Q = Activity.aggregate([ { $match: condition } ]);
Q.exec(function(err, docs) {
  console.log(docs);
})

其中

var condition = {
  '$or': [
    { 'managers.role': 'monitors', 'managers.item': idMonitors },
    { 'people.role': 'monitors', 'people.item': idMonitors },
    { 'teams.item': myTeams.map(team => team._id) },
    { 'context.space': '', 'context.item':  }
  ]
};

和ActvitySchema:

var ActivitySchema = new Schema({
  context: [
    { space: String, item: { type: Schema.Types.ObjectId, refPath: 'contex.space' } }
  ],
  managers: [
    {
      role: String,
      item: { type: Schema.Types.ObjectId, refPath: 'managers.role' }
    }
  ],
  people: [
    {
      item: { type: Schema.Types.ObjectId, refPath: 'persones.rol' },
      role: String
    }
  ],
  ...
});

和idMonitors信息:

console.log(typeof idMonitors);
// OUTPUT: object
console.log(idMonitors);
// OUTPUT: ["5b3bcc5b299d2c62d92179c6"]

我在第一个中得到正确的结果,但在第二个中没有得到。两种结果都应与我了解的文档相同。

有什么可能的建议吗?我希望自己能正确解释。

0 个答案:

没有答案