Da jede Sammlung in Mongodb einen Standardindex für die Spalte _id hat, wollte ich es für mein Szenario wie unten nutzen.Verwenden MongoDB _id Feld als zusammengesetztes Feld mit mehreren Feldern
Ich habe meine Sammlung als unten,
{
"_id":{
"timestamp" : ISODate("2016-08-24T23:22:20.201Z"),
"departmentname" : "sales",
"city":"NJ"
}
//Other fields in my collection
}
Mit dieser Struktur ich in der Lage bin, wie unten abfragen,
db.getCollection('test').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-21T23:22:20.201Z"),
"departmentname" : "sales",
"city":"NJ"
}
}
)
Aber, wenn ich durch einen oder mehrere Bereiche, in denen abfragen Teil sind von _id Säule, wie unten,
db.getCollection('test').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-21T23:22:20.201Z")
}
}
)
(OR)
db.getCollection('test').find(
{
"_id" : {
"departmentname" : "sales"
}
}
)
(OR)
db.getCollection('test').find(
{
"_id" : {
"departmentname" : "sales",
"city":"NJ"
}
}
)
Ich sehe nicht irgendwelche Dokumente
zurückAls ich mit .explain geprüft() Ich sehe, dass es Index verwendet hat, aber fanden keine Dokumente gefunden.
Außerdem würde Ich mag Datumsbereich Abfragen auf Zeitstempel-Feld zu tun, zusammen mit Abfrage auf einem oder mehreren Feldern in der _id Spalte wie unten,
db.getCollection('test').find(
{
"_id.timestamp" : {
"$gte": ISODate("2011-08-21T23:22:20.201Z")
},
"_id.departmentname" : "sales"
}
)
Aber ich sehe keine Dokumente zurückgegeben. Wenn ich .explain() ausführe, sehe ich, dass es colscan und nicht index verwendet hat.
Kann mir jemand auf die richtige Weise helfen, nach einem oder mehreren Feldern in meiner Spalte _id abzufragen.
Danke,
Sri
Dank .. Das hat funktioniert . – javauser
Bitte finden Sie in der Dokumentation von finden Sie auch. Froh, dass es geholfen hat. – Shrabanee
Wenn ich .explain() mit der Abfrage ausführen, scheint Index auf _id-Feld nicht verwandt worden zu sein. Es hat einen Sammelscan gemacht und keinen Index benutzt. Warum sollte das so sein? – javauser