如何知道我的数据库数组中存在哪个数组元素?

我想在mongoDB中写一个查询,在那里我想查找数组中的哪些元素存在于数据库数组中'upvotes'我的查询如下

userupvotesmodel.findOne({mobile_no: "1234567890", upvotes : { $in : ["aa", "bdnvh", "563fa4408d88ea6c13c7abba", "djfufhgj", "5625bd9dbe545d2412d4ae62", "fjjshddhjfn", "djfhudh", "jfhshnffj", "sjdhfkskajdk"] } }, function(err, docs) { if (err) { console.log('Error Finding query results'); console.log(err); res.json({success: 0, message : err}); return next(err); } else { if (docs) { console.log('2 mins', currentdate.getMinutes()); console.log('2 secs', currentdate.getSeconds()); console.log('docs', docs); } } }); 

现在对于上面的查询,如果我的数组中有任何单个值存在于数据库中,那么它会发送整个upvotes数组,但我无法找出哪些元素存在,例如数据库中的“aa”,“bdnvh”等我怎么能写一个查询以知道数据库中存在哪些元素。

我想通过查询每一个元素在一个查询中find这个; 我知道我可以做到这一点,但我想在任何可能的单个mongoDB查询中做到这一点。

我认为你不需要担心查询,你可以使用java脚本来代替。 只需遍历docs.upvotes数组,并将其值与您提供的数组进行比较。

 var my_array = ["aa", "bdnvh", "563fa4408d88ea6c13c7abba", "djfufhgj", "5625bd9dbe545d2412d4ae62", "fjjshddhjfn", "djfhudh", "jfhshnffj", "sjdhfkskajdk"]; // ... your code // inside of if(docs) statement var matched_elements = []; docs.upvotes.forEach(function(element, index, array) { for (var i = 0; i < my_array.length; i++) { if (my_array[i] == element) { matched_elements.push(element); } } }); console.log(matched_elements); 

你可以使用聚合框架。 首先$展开你的upvotes数组。 然后$匹配你提供的数组中的元素。 比$组合它回到_id(或任何你想要的)创build“matched_elements”数组与$ addToSet或$推。 返回的文档将只有upvotes元素(在“matched_elements数组”)也在你的数组中。

 var my_array = ["aa", "bdnvh", "563fa4408d88ea6c13c7abba", "djfufhgj", "5625bd9dbe545d2412d4ae62", "fjjshddhjfn", "djfhudh", "jfhshnffj", "sjdhfkskajdk"]; db.collection.aggregate( [ { "$unwind" : "$upvotes" }, { "$match": { "upvotes": {"$in": my_array} } }, { "$group" : { "_id":"$_id","matched_elements":{ "$addToSet": "$upvotes" }}} ] );