MongoDB聚合查询要计数 [英] MongoDB Aggregation Query to Count
本文介绍了MongoDB聚合查询要计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在ExpressJS和 mongoose 库中使用 Nodejs 和 MongoDB 如何获得另一个用户之间的相互.这是我使用的架构.
I am using Nodejs and MongoDB with expressjs and mongoose library & How can I get mutual between another user. Here are the Schema I use.
const UsersSchema = new mongoose.Schema({
username: { type: String },
email: { type: String },
date_created: { type: Date },
last_modified: { type: Date }
});
const FollowSchema = new Schema({
follower: { type: Schema.Types.ObjectId, ref: 'User', required: true },
following: { type: Schema.Types.ObjectId, ref: 'User', required: true },
date_created: { type: Date },
last_modified: { type: Date }
});
如何查询 Mongo ?
推荐答案
您可以在下面的聚合中使用
You can use below aggregation
db.users.aggregate([
{ "$match": { "_id": 2 }},
{ "$lookup": {
"from": "follows",
"let": { "id": "$_id" },
"pipeline": [
{ "$facet": {
"userFollows": [
{ "$match": { "$expr": { "$eq": ["$follower", "$$id"] }}}
],
"myFollows": [
{ "$match": { "$expr": { "$eq": ["$follower", 1] }}}
]
}},
{ "$project": {
"matchedFollowed": {
"$setIntersection": ["$userFollows.followed", "$myFollows.followed"]
}
}},
{ "$unwind": "$matchedFollowed" }
],
"as": "user"
}},
{ "$lookup": {
"from": "follows",
"let": { "ids": "$user.matchedFollowed" },
"pipeline": [
{ "$match": { "$expr": { "$in": ["$follower", "$$ids"] }}}
],
"as": "mutualConnections"
}}
])
这篇关于MongoDB聚合查询要计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文