Javascript 在同一数组元素上使用$regex和$nor运算符

Javascript 在同一数组元素上使用$regex和$nor运算符,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,我拥有包含以下用户组的mongodb集合: [ { groupName: "Blablabla", members: [ { nick: "rick" }, { nick: "ethan" }, { nick: "jack" } ] }, { groupName: "Lalala", members: [ { nick: "rick" }, { nick: "john" },

我拥有包含以下用户组的mongodb集合:

[
  {
    groupName: "Blablabla",
    members: [
      { nick: "rick" },
      { nick: "ethan" },
      { nick: "jack" }
    ]
  },
  {
    groupName: "Lalala",
    members: [
      { nick: "rick" },
      { nick: "john" },
      { nick: "mark" }
    ]
  }
  ...
]
我希望用户(例如,rick)能够通过组名或组成员nick搜索这些组

这是我的聚合查询(我使用的是mongoose):

它工作得很好,但当我将与rick匹配的内容作为searchquery传递时,它只会给我rick所属的所有组。这是没有用的

我试过这样的方法:

//req.session.user.nick equals rick

Group.aggregate([
  { $match: {
    $or: [
      { $and: [
        { 'members.nick': { $regex: req.query.searchquery } },
        { $nor: [{ 'members.nick': req.session.user.nick }] }
      ] },
      { groupName: { $regex: req.query.searchquery } }
    ]
  } }
]);
但它似乎并没有引用同一个成员nick,所有查询都返回空数组

所以问题是,我如何选择数组元素值与正则表达式匹配,同时又不等于rick的组

示例: 使用此聚合:

Group.aggregate([
  { $match: {
    $or: [
      { 'members.nick': { $regex: req.query.searchquery } },
      { groupName: { $regex: req.query.searchquery } }
    ]
  } }
]);
当我传递“blabla”作为搜索查询时,它会给我第一个“Blablabla”组。当我通过“joh”时,它给了我“Lalala”组,因为用户john是这个组的成员


但是当我通过“ck”以用户rick的身份登录时,我不希望它返回两个组(因为rick是它们的成员),而只返回第一个组,因为jack是它的成员。

我不明白确切的问题是什么。请您发布一个预期结果的示例好吗?我不确定我是否理解,但我猜您的意思是希望从结果中排除包含会话用户昵称的组?是的,但仅当此组中没有与搜索匹配的其他用户时。
Group.aggregate([
  { $match: {
    $or: [
      { 'members.nick': { $regex: req.query.searchquery } },
      { groupName: { $regex: req.query.searchquery } }
    ]
  } }
]);