如何在数组中搜索多个可能的匹配项

时间:2015-07-07 02:32:43

标签: javascript node.js mongodb mongoose mongodb-query

我有一个包含json数组数组的数组。在一种页面中排序,其中一个数组=一个页面,其中包含一个包含json的表的数组。

我的模特是:

var mongoose = require('mongoose');
    Schema = mongoose.Schema;
var Links = new Schema({
        country: {country:String,league:Array},
        team:String,
        dayMoney:[{day:String, money:String}]

    });
mongoose.model('team', Links)

我的代码是:

Team.find({dayMoney: {"$in": [{money: '0.7800000000000002'}, { day: '24 May 2015', money: '72.61000000000001' } ]}},function(err, results) { etcc..

问题是它一直没有回来。我知道我的模型可能就是问题所在。

dayMoney: [ { money: '0', day: '16 Aug 2014' }, { money: '-1', day: '17 Aug 2014' }, { money: '-1', day: '18 Aug 2014' }, { money: '1.27', day: '23 Aug 2014' }, { money: '1.27', day: '24 Aug 2014' }, { money: '1.27', day: '25 Aug 2014' }, { money: '3.91', day: '30 Aug 2014' }, { money: '3.91', day: '31 Aug 2014' }] 

是console.loging其中一个对象的示例

1 个答案:

答案 0 :(得分:2)

使用$elemMatch $or条件来指定要匹配的数组的特定元素。 $in运算符用于将数组的参数作为单个值,而不仅仅是用于查询数组:

Team.find({
    "dayMoney": {
        "$elemMatch":  {
           "$or": [ 
              { "money": '3.91'}, 
              { "day": '16 Aug 2015', "money": '0' }
           ]
        }
    }
},function(err,results) {
    // something useful here
})

我还会在那里为你的数据代替你给出的样本数据。

要小心,因为这些是"字符串" (可能不是一个好主意)并且您似乎也在如何确定值方面存在浮点舍入问题。字符串或任何值必须是"完全匹配"除了可能落在范围内的数值或日期值。或者当然是字符串的正则表达式。