本文介绍了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聚合查询要计数
发布评论