我有两个模型叫做session和unreadcount。我需要从另一个表中获取特定的session计数。下面是我的两个MongoDB模型。
var UnreadCountSchema = new mongoose.Schema({
userId: { type: String, required: true },
sessionId: { type: String, required: true},
unreadCount: { type: Number, required: true, default: 0 },
isDeleted: { type: Boolean, required: true, default: 0 },
}, { timestamps: true });
module.exports = mongoose.model("UnreadCount", UnreadCountSchema);
var SessionSchema = new mongoose.Schema({
name: { type: String, required: false },
subject: { type: String, required: false },
sessionCode: { type: String, required: false },
}, { timestamps: true });
module.exports = mongoose.model("Session", SessionSchema);
字符串
我没有使用引用和关系。当我获取会话时,我需要得到一个计数。我已经尝试查找它不起作用。建议一种方法来做到这一点。
下面是我执行的代码。计数在那里,但我没有得到结果。
const response = await SessionModel.aggregate([
{
$match: query,
},
{
$lookup: {
from: "UnreadCount",
localField: "_id",
foreignField: "sessionId",
as: "unreadCounts",
},
},
{
$addFields: {
unreadCount: {
$cond: {
if: { $gt: [{ $size: "$unreadCounts" }, 0] },
then: { $arrayElemAt: ["$unreadCounts.unreadCount", 0] },
else: 0,
},
},
},
},
// Optionally sort the sessions by lastMessage createdAt
// { $sort: { "lastMessage.createdAt": -1 } },
])
型
2条答案
按热度按时间8wigbo561#
确保两个字段必须具有相同的类型才能进行相等匹配。在这种情况下,您可以使用
$lookup
和管道将sessionId
从UnreadCount集合转换为ObjectId
。字符串
也可以将Session集合中的
_id
转换为string
类型。型
ars1skjm2#
我们必须使用在Mongodb数据库中创建的模型名称,并将对象ID转换为字符串。根据我们要比较的数据类型。
代码中提到的模型名称在数据库中是unreadCount,它就像unreadcount。
字符串