我希望找到与网址匹配但返回自定义对象的记录。
我有这个模特..
const ReactionSchema = mongoose.Schema({
url: {
type: String,
required: true
},
emoji: {
type: String,
enum: ['happy', 'sad', 'angry'],
required: true
},
ip: {
type: String
}
})
我想查询该模型并匹配url
,但会返回如下所示的响应:
[
{
"emoji": "happy",
"count": 4,
"reacted": true
},
{
"emoji": "sad",
"count": 9,
"reacted": false
},
{
"emoji": "angry",
"count": 7,
"reacted": false
}
]
我需要能够通过将记录的reacted
与我在此过程中的变量进行比较来动态计算ip
是否为真。
一次尝试
.aggregate([
{$match: {url}},
{$group: {
_id: '$emoji',
count: {$sum: 1}
}}
])
但我似乎无法连接ips并查看我的变量IP是否在该数组中。
感谢您的帮助。我第一次问!
答案 0 :(得分:0)
将$push
运算符添加到$group
阶段以创建ip
数组。
添加$project
阶段,将_id
重命名为emoji
并计算reacted
字段。
$setSubset
将先前计算的ips
数组与输入变量进行比较,并在输入变量数组是true
数组的子集时返回ips
aggregate([
{$match: {url}},
{$group: {
_id: "$emoji",
count: {$sum: 1},
ips:{$push:"$ip"}
}},
{$project:{_id:0, emoji:"$_id",count:1, reacted:{ $setIsSubset: [[variableip], "$ips" ] }
}}
])