【问题标题】:mongoose schema / query猫鼬模式/查询
【发布时间】:2018-02-05 05:14:02
【问题描述】:

我正在尝试在我的应用中构建一个朋友组件。

我对 Mongo/Mongoose 还很陌生,来自 MySQL 背景。

我在这里要做的是访问用户的个人资料,如果他们的个人资料有私人设置,然后检查该用户是否有以朋友身份访问其页面的用户。

假设我有一个用户模式

var UserSchema = new Schema({
username      : String,
friends       : [{ id: { type: Schema.Types.ObjectId, ref: 'User'}, status: Number }],
});

var User         = mongoose.model('User', UserSchema);

User.findOne({username: 'req.params.username', 'friends.id': req.session.user.id}, function (err, user)
if(user){
    user.isFriend = true;
}
});

我觉得这似乎只查找具有 req.params.username 的任何用户名或具有 req.session.user.id 的任何 id,而不是查找具有此用户名的用户并查看 req.session.user.id在该用户的好友数组中。

有更好的方法吗?

在 MySQL 中,它类似于 select from 'users' where username = 'something',然后检查该结果以查看该结果的好友数据中是否存在 id。

【问题讨论】:

    标签: mongoose mongoose-schema


    【解决方案1】:

    您的查询始终返回_id: username 的文档(如果存在)。您需要做的是获取friends 字段并循环遍历它以查看id 是否存在。或者使用聚合的简单查询也可以。

        User.aggregate([{$match: {_id: req.params.username,
                                  'friends.id': req.session.user.id}},
                        {$project: {friends: {$filter: {
                                                        input: '$friends',
                                                        as: 'fr', 
                                                        cond: {$eq: ['$$fr.id', req.session.user.id]}
                                                       }
                                             }
                                   }
                        }
                       ]);
    

    上面应该返回一个包含一项的数组,其中一项包含friends 数组,如果给定的一个存在于friends 列表中,则该数组又只包含一个id

    注意:req.session.user.id 的类型应为 Schema.Types.ObjectId

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-21
      • 2020-06-02
      • 2012-02-03
      • 2016-08-05
      • 1970-01-01
      • 2021-08-02
      • 2014-02-21
      • 1970-01-01
      相关资源
      最近更新 更多