Javascript Mongoose-$并且不能正常工作,需要找到包含这两个项的数组

Javascript Mongoose-$并且不能正常工作,需要找到包含这两个项的数组,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我正在开发一个基于聊天的应用程序。两个人之间的私人消息是聊天模型,如下所示: let schema = new Schema({ members: [{ type: ObjectId, ref: models.user.name }], chatHistory: [{ type: ObjectId, ref: models.message.name }] }) 对于聊天路线,我有它,所以当你向个人发送消息时,它应该在聊天中查找,如果req.params.id、你联系的人的id和req.

我正在开发一个基于聊天的应用程序。两个人之间的私人消息是聊天模型,如下所示:

let schema = new Schema({
  members: [{ type: ObjectId, ref: models.user.name }],
  chatHistory: [{ type: ObjectId, ref: models.message.name }]
})
对于聊天路线,我有它,所以当你向个人发送消息时,它应该在聊天中查找,如果req.params.id、你联系的人的id和req.session.uid你的id都存在于成员数组中,则查找并返回聊天。不幸的是,它正在查找并返回具有req.params.id或req.session.uid的第一个聊天,因此Mongo中的$and实际上起着or的作用。以下是导致问题的路线:

createChat: {
    path: '/profile/:id/chat',
    reqType: 'post',
    method(req, res, next) {
        let action = 'Create new chat'
        Chats.findOne({ $and: [{ members: { $in: [req.session.uid] }, members: { $in: [req.params.id] } }] }).populate('members chatHistory')
            .then(chat => {
                if (!chat) {
                    Chats.create({ members: req.session.uid })
                        .then(newChat => {
                            newChat.members.push(req.params.id);
                            newChat.save()
                                .then(chat => {
                                    Chats.findById(chat._id).populate('members')
                                        .then(chat => {
                                            res.send(handleResponse(action, chat))
                                        })
                                })
                        })
                } else {
                    res.send(handleResponse(action, chat))
                }
            })
            .catch(error => {
                return next(handleResponse(action, null, error))
            })
    }
}
我知道造成问题的原因如下:

Chats.findOne({ $and: [{ members: { $in: [req.session.uid] }, members: { $in: [req.params.id] } }] }).populate('members chatHistory')
是否有人知道修复程序,以获得和,从而实际表现为或?

成员密钥在$and中重复-这不是有效的对象。应该是,

//atleast on match
Chats.findOne({ $and: [{ members: { $in: [req.session.uid, req.params.id] } }] }).populate('members chatHistory')


我把它换了,但现在它每次只会回到同一个聊天室。基于此,我相信当你把它们放在一个数组中,比如{members:{$in:[req.session.uid,req.params.id]},它会返回一个匹配这些参数中的一个,而不是两个。这看起来很有效!我需要对它进行一点bug测试,但我认为这是可行的。谢谢!
//for both match
Chats.findOne({ $and: [{ members: { $in: [req.session.uid] }},{ members: { $in: [req.params.id] }}] }).populate('members chatHistory')