如何在mongodb中找到javascript数组中所有元素的匹配项?

时间:2017-12-12 06:28:14

标签: javascript mongodb mongodb-query

我正在尝试搜索mongodb数据库中我为数组中的每个不同元素创建的所有匹配项。我有以下代码

var fiatList = ['EUR', 'AUD', 'BRL', 'CAD', 'CHF', 'CNY', 'CZK', 'DKK'];

function updateFiatTotal() {

    fiatList.forEach(function(entry){
    console.log('Calculating Fiat total data');
    models.Market.find({ quote: { $in: entry } }, function(err, markets) {
    if (err) return console.log(err);
    console.log('markets');
     });
  });
}

出于某种原因,这并没有为我试图打印到数据库中的市场返回任何内容。如果有人能够指出为什么它没有正确查询mongodb数据库那么它会被推荐

1 个答案:

答案 0 :(得分:0)

$in需要一个数组,因此您必须将fiatList作为参数传递。也就是说,如果您要查找quote: ['EUR', 'AUD', 'BRL', 'CAD', 'CHF', 'CNY', 'CZK', 'DKK']

的文档
models.Market.find({
    quote: fiatList
}, function(err, markets) {
    if (err) return console.log(err);
    console.log('markets');

});

现在,如果您正在寻找可能具有其中一个值的文档。示例:quote:['EUR', 'AUD'], quote:['CZK', 'CHF'] 然后你可以这样做:

fiatList.forEach(function(entry) {

    models.Market.find({
        quote: entry
    }, function(err, markets) {
        if (err) return console.log(err);
        console.log('markets');

    });
});

通过这种方式,您可以获得quote:['CZK', 'CHF']相同的文档,因为

会获得一次
models.Market.find({
    quote: 'CZK'
})

一次
models.Market.find({
    quote: 'CHF'
}) 

此外,如果您仍然无法获得任何结果,请检查您的收藏是否称为市场,而不是市场。我之前听说过人们用mongoose用资本创建了这个集合,但在mongodb中它是用小写字母写的。