mongodb, how to find in array other array -


i need help. trying find array in array.

records:

{     "_id" : objectid("56b7e6966213e8d142ef55b7"),     "users" : [          objectid("56b0e547a838b5a45b4d0100"), // 0         objectid("56a7e16e37e5adf32b97cc3d")  // 1     ] }, {     "_id" : objectid("56b7e6966213e8d142ef55b7"),     "users" : [          objectid("56b0e547a838b5a45b4d0100"),          objectid("56a7e16e37e5adf32b97cc3d"),         objectid("56b7e6b96213e8d142ef55b8")     ] } 

i'm trying find first record "_id" : objectid("56b7e6966213e8d142ef55b7"),

i'm using query:

db.collection.find({"users" : { $in: [      objectid("56b0e547a838b5a45b4d0100"),      objectid("56a7e16e37e5adf32b97cc3d") ]}}) 

or

db.collection.find({ $and: [{     "users": objectid("56b0e547a838b5a45b4d0100") }, {     "users": objectid("56a7e16e37e5adf32b97cc3d") }]}) 

response gives me 2 records.

this request gives me correct response:

db.collection.find({"users" : [      objectid("56b0e547a838b5a45b4d0100"), // 0     objectid("56a7e16e37e5adf32b97cc3d")  // 1 ]}) 

but if record has array this:

{     "_id" : objectid("56b7e6966213e8d142ef55b7"),     "users" : [          objectid("56a7e16e37e5adf32b97cc3d"), // 1         objectid("56b0e547a838b5a45b4d0100")  // 0     ] } 

it doesn't work

$all, $eq, $in doesn't work

db.rooms.find({       users: {         $all: [          objectid("56a7e16e37e5adf32b97cc3d"),          objectid("56b0e547a838b5a45b4d0100")         ]     }  }) 

i need find rows [1,2] == [1,2] or [1,2] == [2,1]

not [1,2,3] == [1,2]

i appreciate if can me.

if expect resulting document "only" 2 array entries, combination of conditions want $all , $size:

db.rooms.find({     "users": {         "$all": [                 objectid("56b0e547a838b5a45b4d0100"),                 objectid("56a7e16e37e5adf32b97cc3d")          ],         "$size": 2     } }) 

where $all $and shorter syntax, , $size retricts since list n entries, want match of particular length/size.

this better specifying array directly, since match in either order, opposed statement not match considering order different , therefore not "exact" match:

db.rooms.find({     "users": [         objectid("56a7e16e37e5adf32b97cc3d"),         objectid("56b0e547a838b5a45b4d0100")     ] }) 

so logically array contains "all" specified entries, , same "size" input , no different.


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -