1

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

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 } } ] }
});

谁能向我解释我在这里做错了什么?

4

1 回答 1

2

您应该使用点符号来定位特定的元素属性,而不是将整个元素匹配为对象:

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

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

对于确切的比较:

db.people.find({
  "timeline.born_year": 1999
});
于 2013-09-19T21:15:42.350 回答