How to store the same key multi times in a Hash?

given an Arra tags[]

I need to produce a resulting Hash as following …

{ “$in” => [tags[0]], “$in” =>[tags[1], …}

in which the key should be always the same and the value being an
Array

I tried this :

     myHash = {}
     tags.each do |tag|
       h = {"$in" => [tag]}
       myHash.merge!(h)
     end

but the merge! is only changing the value … (as the key is always
the same …)
(there is no += as with Array class …)

thanks for your feedback

On Feb 27, 6:29pm, Erwin [email protected] wrote:

given an Arra tags[]

I need to produce a resulting Hash as following …

{ “$in” => [tags[0]], “$in” =>[tags[1], …}

in which the key should be always the same and the value being an
Array

By definition, a hash stores a single value for a given key. The
closest you’ll get is to make the value an array of all the things for
the key in question.

Fred

I agree with Frederick C…

Your code will be like this :

myHashes = []
tags.each do |tag|
h = {"$in" => [tag]}
myHash << h
end

and myHashes will contains :

[{ “$in” => [tags[0]]}, {"$in" =>[tags[1]}, …]

which myHashes is an array of hashes.

Hope this can help you :slight_smile:

thanks a lot … !!!

this is to be used with MongoID as a criteria

criteria.where(:tags => { “$in” => [tags[0]], “$in”
=>[tags[1]] }).to_a

any suggestion with json structure ?

thanks Fred

I need to write a Mongoid criteria

criteria.where(:tags => myStruct ).to_a

in which myStruct will have this structure { “$in” =>
[check_tags[0]], “$in” =>[check_tags[1]] , … }
built from a check_tags Array

it’s a sequence of .in criteria
I am checking if ALL of the elements of check_tags[] are included in a
Mongoid record Array field :tags

the simplest Mongoid criteria:
criteria.in(:tags => tags)
just perform a checking on ANY element included, not ALL

Thanks fred … found how to do it…
there is a specific criteria for it ( I did not fully understand when
reading it the first time…)

Criteria#all_in:
Matches if all values provided match, useful for doing exact matches
on arrays.

so writing :
criteria.all_in(:tags => tags ).to_a

did it …

I’ll try to give an eye to the underlaying Mongoid ruby code in charge
of doing that …

On Feb 27, 7:56pm, Erwin [email protected] wrote:

this is to be used with MongoID as a criteria

criteria.where(:tags => { “$in” => [tags[0]], “$in”
=>[tags[1]] }).to_a

any suggestion with json structure ?

You can’t repeat keys in a json hash either. What are you actually
trying to do?

Fred