mongodb query - Meteor.find multiple values in an array -


i using auto schema define array field. need find documents multiple specific values contained in array. know can use $in: operator while $in: can match either 1 of value in first array against second array while need match record have value in first array. how can achieve this?

schema definition

demands = new mongo.collection("demands");  var demandschema = new simpleschema({   ability: {type:array},   language: {type: array}});  demands.attachschema(demandschema); 

contents definition

demandsset=[   {ability: ["laser eye", "rocky skin", "fly"], language: ["english", "latin", "hindu"]},   {ability: ["sky-high jump", "rocky skin", "fly"], language: ["english", "latin", "japanese"]},   {ability: ["rocky skin", "sky-high jump"], language: ["english", "latin", "russian"]} ]; 

target set

var targetability = ["rocky skin", "fly"]; var targetlanguage = ["english", "hindu"]; 

when $in operation

demands.find({ $and: [   { ability: { $in: targetability }},    { language: { $in: targetlanguage }} ]}).fetch(); 

i return me records, while not correct, how can perform such find operation?

$in: not going work because looks any match when comparing 2 arrays, not all elements of 1 array must present in other.

you can write complete javascript functions execute required comparisons inside mongodb query. see $where:

for example:

demands.find({$where:   "this.ability.indexof(targetability[0])   > -1 &&    this.ability.indexof(targetability[1])   > -1 &&    this.language.indexof(targetlanguage[0]) > -1 &&    this.language.indexof(targetlanguage[1]) > -1" }); 

if candidates have other 2 entries each can write more general form of of course.

note meteor apparently does not support function() form of $where: restriction may dated.

also note $where: cannot take advantage of indexes performance may not suitable large collections.


Comments