Я пытаюсь добавить функцию как на мой сайт.Я сделал коллекцию лайков со следующей схемой.Я использую пользовательский _id, чтобы избежать создания дополнительного индекса.
{
_id: {
postId: ObjectId,
userId: ObjectId
}
}
У меня есть маршрут на моем сервере, который ищет коллекцию сообщений с использованием MongoDB агрегаты .Я пытаюсь добавить стадию $ lookup к текущему конвейеру, чтобы добавить свойство Мне нравится с типом Boolean , указывающим, является ли сообщение или нет сообщениепонравился пользователю.Вот этап $ lookup , который не работает ( понравился возвращает пустой массив все время, даже когда есть соответствующий документ типа):
{
$lookup: {
from: 'likes',
let: { likedPostId: '$_id.postId', likerUserId: '$_id.userId' },
pipeline: [
{ $match:
{ $expr:
{ $and:
[
{ $eq: [
'$$likerUserId',
ObjectId('12345')
]},
{ $eq: [
'$$likedPostId',
'$_id'
]}
]
}
}
}
}
],
as: 'liked'
}
}
Я думаюпроблема в том, что переменные на самом деле не содержат значений, которых я ожидаю.Есть ли способ решить это?Также, если вы знаете более простой способ реализации этого, я буду признателен, если вы поделитесь им со мной.
Я попытался сравнить два идентичных экземпляра ObjectId () , чтобы обеспечить ObjectId экземпляров можно сравнить с помощью оператора $ eq .Также попытался определить вложенные переменные , как указано в приведенном выше фрагменте кода, в другом вложенном поле .единственное отличие в этой проблеме состоит в том, что я пытаюсь вытащить свойства за пределы поля _id .
PS Я знаю, что Мне нравится свойство будет Array вместо Boolean .Но я думаю преобразовать это в Boolean на следующем этапе.Но сейчас это не проблема.