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

时间:2015-11-13 01:06:47

标签: arrays node.js mongodb mongoose

我想在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查询中执行此操作。

2 个答案:

答案 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;
&#13;
&#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" }}}
] );