我正在使用mongoose和nestjs构建一个聊天应用程序。这是我第一次尝试使用mongo作为数据库,所以我很难区分我应该使用哪个mongo查询。
下面的功能是找到登录用户和其他用户之间的一对一聊天。我在Insomnia中测试了这两种方法,结果是一样的。
方法1
async findOneOnOneChat(currentUserId, userId) {
const oneOnOneChat = await this.chatModel
.find({
isGroupChat: false,
})
.and([
{ users: { $elemMatch: { $eq: currentUserId } } },
{ users: { $elemMatch: { $eq: userId } } }
])
return oneOnOneChat;
}
方法二
async findOneOnOneChat(currentUserId, userId) {
const oneOnOneChat = await this.chatModel
.find({
isGroupChat: false,
})
.and([{ users: { $in: userId } }, { users: { $in: id } }])
return oneOnOneChat;
}
所以我的问题是两种方法有什么区别?哪种方法更好?或者有更好的版本可以实现我想要的?
1条答案
按热度按时间zaq34kh61#
这是两码事。
当
userId
是一个数组,并且需要user
值时,使用{ users: { $in: userId } }
(s)来匹配userId
中的一个或多个元素。在这种情况下,user
可以是单个值或值的数组,但userId
必须是数组。您可以将其视为userId
上的循环,对于userId
中的每个元素,在user
中搜索匹配项。使用
{ users: { $elemMatch: { $eq: userId } } }
,其中users
是一个数组,userId
是一个单一的值。你可以把它看作是users
上的一个循环,对于users
中的每个元素,都在搜索一个等于userId
的匹配。