我有一个人员集合,其中包含一年的时间线数组,当时此人发生了某些事情。比如他们出生的那一年,就像这样:
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 } } ] }
});
有人可以向我解释我在这里做错了吗?
答案 0 :(得分:1)
您应该使用点表示法来定位特定元素属性,而不是将整个元素作为对象匹配:
db.people.find({
"timeline.born_year": { $lt: 2000 }
});
这将找到所有具有timeline
数组元素的文档,其属性为born_year
,其值为< 2000。
准确比较:
db.people.find({
"timeline.born_year": 1999
});