我想在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",&#34 ; bdnvh"在数据库中如何编写查询以了解数据库中存在哪些元素。
我希望通过查询每个元素在一个查询中找到它;我知道我可以这样做,但我想在任何可能的单个mongoDB查询中执行此操作。
答案 0 :(得分:1)
我认为您不必担心查询,您只需使用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);
&#13;
答案 1 :(得分:1)
您可以使用聚合框架。首先$展开你的upvotes数组。然后$匹配您提供的数组中的元素。比$ group还要_id(或任何你想要的)用$ addToSet或$ push创建“matched_elements”数组。返回的文档只有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" }}}
] );