获取 MongoDB 中每个文档被点赞的文档数
Get the number of documents liked per document in MongoDB
我正在使用 MongoDB 作为数据库来处理一个项目,我遇到了一个问题:我找不到正确的查询来简单地计算文档的点赞次数。我用的合集是这个:
{ "username" : "example1",
"like" : [ { "document_id" : "doc1" },
"document_id" : "doc2 },
...]
}
所以我需要计算的是每个文档的点赞数,所以最后我会得到
{ "document_id" : "docA" , nbLikes : 30 }, {"document_id" : "docB", nbLikes : 1}
任何人都可以帮助我,因为我失败了。
您可以展开每个文档的 like
数组,然后按 document_id
分组以获得每个值的计数:
db.test.aggregate([
// Duplicate each doc, once per 'like' array element
{$unwind: '$like'},
// Group them by document_id and assemble a count
{$group: {_id: '$like.document_id', nbLikes: {$sum: 1}}},
// Reshape the docs to match the desired output
{$project: {_id: 0, document_id: '$_id', nbLikes: 1}}
])
添加 "likeCount" 字段并增加每个 $push 操作的计数并读取 "likeCount" 字段
db.test.update(
{ _id: "..." },
{
$inc: { likeCount: 1 },
$push: { like: { "document_id" : "doc1" } }
}
)
我正在使用 MongoDB 作为数据库来处理一个项目,我遇到了一个问题:我找不到正确的查询来简单地计算文档的点赞次数。我用的合集是这个:
{ "username" : "example1",
"like" : [ { "document_id" : "doc1" },
"document_id" : "doc2 },
...]
}
所以我需要计算的是每个文档的点赞数,所以最后我会得到
{ "document_id" : "docA" , nbLikes : 30 }, {"document_id" : "docB", nbLikes : 1}
任何人都可以帮助我,因为我失败了。
您可以展开每个文档的 like
数组,然后按 document_id
分组以获得每个值的计数:
db.test.aggregate([
// Duplicate each doc, once per 'like' array element
{$unwind: '$like'},
// Group them by document_id and assemble a count
{$group: {_id: '$like.document_id', nbLikes: {$sum: 1}}},
// Reshape the docs to match the desired output
{$project: {_id: 0, document_id: '$_id', nbLikes: 1}}
])
添加 "likeCount" 字段并增加每个 $push 操作的计数并读取 "likeCount" 字段
db.test.update(
{ _id: "..." },
{
$inc: { likeCount: 1 },
$push: { like: { "document_id" : "doc1" } }
}
)