2016-01-14 3 views
0

У меня есть коллекция с именем, и у меня есть один документ и его реплицированный документ, но в реплицированном документе у нас есть одно поле, другое, у какого-то документа нет реплицированного документа, и эта ситуация зависит от поля массива документа, если это поле имеет userId пользователя, тогда реплицированный документ будет существовать, иначе он не будет существовать.Как получить документ на основе существования другого документа в мангусте?

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

Я сделал запрос, но показывает ошибку я использую $ существует в $ конде?

Post.aggregate([ 
     { 
      $match: { 
       socomo_visibility: socomoId 
      } 
     }, 
     { 
      $project: { 
       "post_stream_type": { 
        $cond: { 
         if: { 
          'following_users_list': { 
           $exist: [userId] 
          } 

         }, 
         then: constants.POST_STREAM_TYPE.FOLLOW.value, 
         else: constants.POST_STREAM_TYPE.SOCIAL_CURRY_CHANNEL.value 
        } 
       } 

      } 
    } 

          ] 

ответ

0

хорошо, наконец, я сделал это без использования агрегации. мой ответ для запроса

Post.find({ 
    $or: [{ 
      socomo_visibility: { 
       $elemMatch: { 
        $eq: socomoId 
       } 
      }, 
      post_stream_type: constants.POST_STREAM_TYPE.SOCIAL_CURRY_CHANNEL.value, 
      following_users_list: { 
       $exists: true, 
       $nin: [userId] 
      } 
     }, 
     { 
      socomo_visibility: { 
       $elemMatch: { 
        $eq: socomoId 
       } 
      }, 
      post_stream_type: constants.POST_STREAM_TYPE.FOLLOW.value, 
      following_users_list: { 
       $elemMatch: { 
        $eq: userId 
       } 
      } 
     }] 
}) 
0

Вы можете проверить, имеет ли ваш массив некоторое значение в логическое выражение-таким образом:

  1. Do пересечение массива и значение, используя $setIntersection.
  2. Проверьте размер этого массива пересечений, используя $size.
  3. Если размер больше 0, тогда значение присутствует в массиве. $gt сделаете эту проверку.

Попробуйте следующий код:

Post.aggregate([ 
    { 
    $project: { 
    "post_stream_type": { 
     $cond: { 
     if: {$gt: [{$size: {$setIntersection: ["$following_users_list", [userId]] } }, 0] }, 
     then: constants.POST_STREAM_TYPE.FOLLOW.value, 
     else: constants.POST_STREAM_TYPE.SOCIAL_CURRY_CHANNEL.value 
     } 
    } 
    } 
    } 
]) 
+0

Спасибо за ваши усилия .I попытался это, но его возвращение двух полей всех _id данных и post_stream_name. Я хочу, чтобы в исходном doc-элементе userId затем получил значение post_stream_type: POST_STREAM_TYPE.FOLLOW.value для этого родительского элемента, в противном случае получим исходный для этого родительского идентификатора .parent_id будет таким же как для оригинала, так и для репликации, но их stream_type отличается. – mayank

Смежные вопросы