0
基本上我正在开发一个聊天应用程序,这个猫鼬模式表示一个用于2个用户之间的私人聊天的模式。
即时尝试做的是检查从客户端 给出的id1和id2是否在我的私人聊天数据库集合中。问题是这个mongoDB查询无法正常工作,并且这些用户标识已经存在于聊天文档中。用户1和用户2中的相同_id创建了一个新的聊天文档,只是这次逆转了。这就是为什么我需要$or
运营商,但正如我打算
const chatSchema = new Schema({
user1: {
_id: String,
username: String,
fullName: String
},
user2: {
_id: String,
username: String,
fullName: String
},
messages: [
{
_id: false,
author: String,
text: String,
date: Number
}
]
});
所以这是我的实现,以检查是否用户之间的这种关系已经存在我的查询不起作用。如果它没有创建文档并保存它,则会执行某些操作。 data.user._id
代表用户的ID,data.friend._id
代表您正在聊天的用户的ID。
Chat.count(
{
$or: [
{
user1: {
_id: data.user._id
},
user2: {
_id: data.friend._id
}
},
{
user2: {
_id: data.user._id
},
user1: {
_id: data.friend._id
}
}
]
}, (err, count) => {
if (!count) {
new Chat({
user1: data.user,
user2: data.friend,
messages: []
}).save((err, data) => {
if (err) {
console.log(err);
}
socket.join(data._id);
socket.emit('chats', data);
});
}
});
另外,我建议您使用findOne而不是使用相同$或条件的Count。如果声明适用(错误或返回的文档,或者两者都不存在),但现在您可以返回套接字中的现有实例文档,以便可以将新数据附加到消息数组。 – SylonZero
正是我所做的感谢 –