我使用_id字段作为我的文档的复合键,其中包含2个字段。
{
"_id" : {
"timestamp" : ISODate("2016-08-25T05:43:00.000-19:30"),
"hostName" : "nj"
}
}
我注意到它我只能查询是否在查询中同时使用这两个字段。如果我使用其中一个,我不会收到任何文件。
db.getCollection('sales').find(
{
"_id" : {
"hostName" : "tryme"
}
}
db.getCollection('sales').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-25T05:43:00.000-19:30")
}
}
上述脚本不会返回任何文件。
另外,我无法在日期字段中使用$ gte / $ lte运算符
db.getCollection('sales').find(
{
"_id" : {
"timestamp" : {
"$lte":ISODate("2016-08-25T04:51:00.000-19:30")
},
"hostName" : "tryme"
}
}
)
以上也不会返回任何文档。
以下查询有效但我看到,根据explain(),它使用了集合扫描并且未使用索引。
db.getCollection('sales').find(
{
"_id.timestamp" : ISODate("2016-08-25T04:51:00.000-19:30"),
"_id.hostName" : "tryme"
}
)
==
db.getCollection('sales').find(
{
"_id.timestamp" : {
"$gte": ISODate("2016-08-25T04:52:00.000-19:30")
},
"_id.hostName" : "tryme"
}
)
不确定我是否已了解_id字段的工作原理。
基本上,我希望能够使用复合查询的部分字段,并且还可以使用日期类型字段进行范围查询,例如/ greaterthan / less等等,同时利用_id字段上的索引。 / p>
有人可以帮我解决这个问题。
谢谢,
斯
答案 0 :(得分:0)