Javascript 在同一数组元素上使用$regex和$nor运算符
我拥有包含以下用户组的mongodb集合: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" },
[
{
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 } }
]
} }
]);