Может кто-нибудь сгенерировать запрос mongodb для моего сценария - PullRequest
0 голосов
/ 08 декабря 2018

Я новичок в MongoDB и использую Mongoose для управления данными в MongoDB и обратно.У меня есть коллекция, имеющая структуру ниже:

var post= new Schema({
          message: String, 
          created_by_user_id: mongoose.Schema.Types.ObjectId,
          created_at: Date,
          likes: [new Schema({liked_by_user_id: mongoose.Schema.Types.ObjectId})]
});  

Ниже приведена коллекция с фиктивными документами:

[{
   "_id": "5c0254c13a22f222ceb861ad",
   "message": "from pppr",
   "created_by_user_id": "5c0253e9a53bed2165c0625c",
   "likes": [
     {
       "_id": "5c027a6fff5fcb5ab180e20c",
       "liked_by_user_id": "5c0253e9a53bed2165c0625c"
     },
     {
       "_id": "5c028e46abc09775c10d767b",
       "liked_by_user_id": "5c0234c1d8832b6af3b4f4a6"
     }
   ],
   "created_at": "2018-12-01T09:30:41.943Z",
   "__v": 0
},
{
   "_id": "5c0254c13a22f222ceb861ad",
   "message": "from pppr",
   "created_by_user_id": "5c0253e9a53bed2165c0625c",
   "likes": [
      {
         "_id": "5c027a6fff5fcb5ab180e20c",
         "liked_by_user_id": "5c0253e9a53bed2165c0625c"
      },
      {
         "_id": "5c028e46abc09775c10d767b",
          "liked_by_user_id": "5c0234c1d8832b6af3b4f4a6"
      }
    ],
   "created_at": "2018-12-01T09:30:41.943Z",
   "__v": 0
}]  

Теперь я пытаюсь получить все документы вместе со статусом, который будет указыватьчто, понравился ли мне соответствующий пост или нет.В ответ я также отправляю свой идентификатор пользователя.

В принципе, на моей стене система должна показывать все сообщения, созданные мной или моими друзьями, а также дополнительный статус в каждом документе, который покажет, понравился ли мне соответствующий пост или нет.

Я сохраняю друзей пользователя в отдельной коллекции, называемой "userfriends".Структура этой коллекции приведена ниже:

var userfriends = new Schema({
      user_id_1: mongoose.Schema.Types.ObjectId,
      user_id_2: mongoose.Schema.Types.ObjectId,
      created_at: Date
});  

Я просто хочу получить все сообщения вместе с этим дополнительным полем.Таким образом, вы можете игнорировать коллекцию userfriends, это просто для того, чтобы направлять вас больше.

Может ли кто-нибудь помочь мне в этом?Каким будет запрос, который может удовлетворить мое требование?

Заранее спасибо

1 Ответ

0 голосов
/ 08 декабря 2018

Вы можете использовать $addFields вместе с $in оператор агрегирования

db.collection.aggregate([
  { "$addFields": { 
    "status": { "$in": [mongoose.Types.ObjectId(userId), "$likes.liked_by_user_id"] }
  }}
])

Это добавит новые поля в каждый ваш документ с логическим значением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...