使用$ in和$ lt来查找MongoDB中具有特定数组值的数据

时间:2013-09-19 21:09:05

标签: mongodb mongodb-query

我有一个人员集合,其中包含一年的时间线数组,当时此人发生了某些事情。比如他们出生的那一年,就像这样:

db.people.insert({
  "timeline": [
    { "born_year": 1999 },
    { "other_event": 2005 }
  ]
});

我可以为1999年出生的人查询这个集合:

db.people.find({
  "timeline": { $in: [ { "born_year": 1999 } ] }
});

然而,当使用$ lt来查询2000年之前出生的人时,我根本没有得到任何结果:

db.people.find({
  "timeline": { $in: [ { "born_year": { $lt: 2000 } } ] }
});

有人可以向我解释我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

您应该使用点表示法来定位特定元素属性,而不是将整个元素作为对象匹配:

db.people.find({
  "timeline.born_year": { $lt: 2000 }
});

这将找到所有具有timeline数组元素的文档,其属性为born_year,其值为< 2000。

准确比较:

db.people.find({
  "timeline.born_year": 1999
});