Я использую mongoid-history драгоценный камень и мангуст в Рубине. Я фактически связываю историю монго с моделью под названием SocialPost, поэтому я могу что-то сделать.Создать модель с помощью атрибута hash
history = current_user.social_posts.history_tracks
Теперь мне нужно фильтровать эту «историю» с областью или метод, который атрибут фильтра «association_chain» из истории следящей модели, но атрибуты «history_tracks» выполнены таким образом:
<HistoryTracker _id: 57bdc1cb65e59325ae000001, created_at: 2016-08-24 15:48:27 UTC, updated_at: 2016-08-24 15:48:27 UTC, association_chain: [{"name"=>"SocialPost", "id"=>BSON::ObjectId('57ac8b0f65e5930944000000')}], modified: {"facebook_likes_count"=>2594213, "tweeter_followers_count"=>0}, original: {}, version: 1, action: "update", scope: "social_post", modifier_id: nil>
Итак, как я могу создать поиск в моем HistoryTracker модели, которая позволила мне искать определенную группу идентификаторов внутри association_chain, что-то вроде этого:
UPDATE с помощью $ elemMatch
#test case multiple social_id: empty result
HistoryTracker.any_in({:association_chain.elem_match => [{name: 'SocialPost', :id.in => social_ids}] })
#test case 1 social_id: match result
HistoryTracker.any_in({:association_chain.elem_match => [{name: 'SocialPost', :id => social_ids.first}] })