我如何检查用户是否已经在NodeJs中跟踪其他用户 – Mongoose

我有一个followSchema:

var followSchema = mongoose.Schema({ user : { type: Number, ref: 'User'}, following : { type: Number, ref: 'User'} }); 

我有两个用户。 首先,我需要列出他所关注的所有用户。 第二个,我需要检查他是否已经跟随我从第一个收集的一些用户。

我怎样才能以一种情感的方式在mongoose身上做到这一点。 要获得第一个用户的追随者列表并不难,但要检查第二个用户是否有一个更难,我不知道如何pipe理。

这很简单,你只需要查询两个条件。 假设“跟随”作为模型:

 Follow.find({ "user": 1, "following": 2 }) 

尽pipe取决于你的“规模”,但下面的模式可能更有用:

 var userSchema = new Schema({ "_id": Number, "name": String, "following": [{ "type": Number, "ref": "User" }], "followedBy": [{ "type": Number, "ref": "User" }] }) 

查询几乎完全相同:

 User.find({ "_id": 1, "following": 2 }) 

但是,当然它总是给你其他的select,只要遵循“arrays”的最佳实践的一般限制。

您可以采取的一种方法是修改您的followSchema,将following字段作为数组使用人口概念:

 var mongoose = require('mongoose') , Schema = mongoose.Schema var userSchema = Schema({ _id: Number, name: String, age: Number, followers: [{ type: Schema.Types.ObjectId, ref: 'Follow' }] }); var followSchema = Schema({ _user: { type: Number, ref: 'User' }, following: [{ type: Number, ref: 'User' }] }); var Follow = mongoose.model('Follow', followSchema); var User = mongoose.model('User', userSchema); 

然后您可以使用一些示例用户查询。 作为示例指南(未经testing):

 var user1_id = 1, user2_id = 2, user3_id = 3, user1_following = [], user2_following = []; var user1 = new User({ _id: user1_id, name: 'User1', age: 31 }); var user2 = new User({ _id: user2_id, name: 'User2', age: 32 }); var user3 = new User({ _id: user3_id, name: 'User3', age: 32 }); user3.save(function (err) { if (err) return handleError(err); }) user1.save(function (err) { if (err) return handleError(err); var follower3 = new Follow({ _user: user3_id }); follower3.save(function (err) { if (err) return handleError(err); // thats it! }); }) user2.save(function (err) { if (err) return handleError(err); var follower3 = new Follow({ _user: user3_id }); follower3.save(function (err) { if (err) return handleError(err); // thats it! }); }) Follow .find({ _user: user1_id }) .exec(function (err, following) { if (err) return handleError(err); user1_following = following; }) Follow .find({ _user: user2_id }) .exec(function (err, following) { if (err) return handleError(err); user2_following = following; }) 

然后你可以使用Underscore的intersection() ,它将给你一个两个数组中存在的值列表。

 var commonFollowings = _.intersection(user1_following, user2_following); // In the example above, commonFollowings => [3]