javascript - 在同一个数组元素上使用 $regex 和 $nor 运算符
问题描述
我有包含用户组的 mongodb 集合:
[
{
groupName: "Blablabla",
members: [
{ nick: "rick" },
{ nick: "ethan" },
{ nick: "jack" }
]
},
{
groupName: "Lalala",
members: [
{ nick: "rick" },
{ nick: "john" },
{ nick: "mark" }
]
}
...
]
我希望用户(例如rick)能够通过组名或组成员昵称来搜索这些组。
这是我的聚合查询(我使用的是猫鼬):
Group.aggregate([
{ $match: {
$or: [
{ 'members.nick': { $regex: req.query.searchquery } },
{ groupName: { $regex: req.query.searchquery } }
]
} }
]);
它工作正常,但是当我将与 rick 匹配的内容作为搜索查询传递时,它只给了我 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”作为搜索查询传递时,它给了我第一个“Bla blabla ”组。当我通过“joh”时,它给了我“Lalala”组,因为用户joh n 是该组的成员。
但是当我通过“ ck ”作为用户 rick 登录时,我不希望它返回两个组(因为 rick是他们的成员),而只返回第一个组,因为jack是它的成员。
解决方案
推荐阅读
- javascript - Javascript 在旧的 Windows Firefox 上失败
- asp.net-core - DotNet Core 3 EF 3 与 Cosmos DB 问题
- xml - 使用 xslt 替换 xml 中的值
- android - 无法连接到运行 Oreo 的 google android 模拟器上的端口
- c++ - QSerialPort readyRead() 信号无法正常工作
- javascript - 仅与 Socket.io 中的房间进行私人聊天对话
- arangodb - 如何在 ArangoDB 中创建边缘集合?
- c++ - 连接 RadioStream 和 MP3 解码器
- wordpress - 尝试自定义主题时出现致命错误?
- ios - 在 Swift 中过滤具有属性和 Map 的自定义对象数组