我正在尝试使用 mongoose 查询 mongoDB 数据库中特定文档的子文档。我想首先运行查询来获取特定的用户文档,然后查询子文档数组以查找与特定 id 匹配的文档。
这里提供一些上下文是我的数据结构
每个文档都针对特定用户,articleVotes
子文档包含他们投票的文章。使用我的 User
mongoose 模型通过 User.findOne({_id: req.user._id))
查找当前用户文档后,我想检查他们是否有通过执行类似于 findOne({_id:articleId, voteType: "1"})
的操作,对特定文章进行了投票。然而,因为它是一个子文档,我正在努力弄清楚如何做到这一点。有人可以解释一下我该怎么做吗?
最佳答案
您可以使用$filter运算符,
MongoDB v4.4 支持findOne()
-
$filter
在投影中迭代atricleVotes
的循环使用条件articleId
进行数组和过滤和voteType
db.collection.findOne({
_id: req.user._id,
"atricleVotes.articleId": articleId
},
{
_id: 1,
atricleVotes: {
$filter: {
input: "$atricleVotes",
cond: {
$and: [
{ $eq: ["$$this.articleId", articleId] },
{ $eq: ["$$this.voteType", 1] }
]
}
}
}
})
MongoDB v3.2 或更高版本
-
$match
你的条件 -
$addFields
获得相同的 $filter 操作并进行过滤atricleVotes
db.collection.aggregate([
{
$match: {
_id: req.user._id,
"atricleVotes.articleId": articleId
}
},
{
$addFields: {
atricleVotes: {
$filter: {
input: "$atricleVotes",
cond: {
$and: [
{ $eq: ["$$this.articleId", articleId] },
{ $eq: ["$$this.voteType", 1] }
]
}
}
}
}
}
])
关于javascript - 找到父文档后如何查询mongoDB子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65467918/