sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb 2dsphere-index för kapslade arrayfält

Dokumentet du tillhandahållit ser bra ut för mig, jag gjorde också ett enkelt test med en kort version av ditt dokument och det fungerar för mig.

"_id" : ObjectId("530cb07c009d8c323b477957"),
        "time_from" : ISODate("2014-02-25T15:02:20.714Z"),
        "checkin" : [
                {
                        "user_id" : 1,
                        "loc" : {
                                "type" : "Point",
                                "coordinates" : [
                                        73.43,
                                        42.22
                                ]
                        }
                }
        ]

db.testGeo.ensureIndex( { "checkin.loc" : "2dsphere"  } );

Så jag föreslår att du kontrollerar andra dokument i samlingen, några av dem kan vara felaktiga för indexet. Se också till att dina koordinatmatriselement inte är strängar. Eftersom detta dokument inte är giltigt för 2dsphere index:

"_id" : ObjectId("530cb07c009d8c323b477957"),
            "time_from" : ISODate("2014-02-25T15:02:20.714Z"),
            "checkin" : [
                    {
                            "user_id" : 1,
                            "loc" : {
                                    "type" : "Point",
                                    "coordinates" : [
                                            "73.43",
                                            "42.22"
                                    ]
                            }
                    }
            ]

Observera citattecken för koordinatelementen som gör dem till strängar.

SVAR PÅ KOMMENTAREN: Mongo tillåter endast ett geospatialt index per samling. Så du behöver inte ange hela fältsökvägen för din runCommand. Samlingens namn räcker. Detta bör fungera för dig om samlingens namn är checkin_20140222

db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})

Hoppas det hjälper!




  1. QueryBuilder och BasicDBObjectBuilder användning i MongoDB 3.3.0 ovan

  2. MongoDB - hur man infogar en post med hjälp av autoincrement-funktionalitet

  3. Hämtar data från mongodb genom nodejs och express till en HTML-sida

  4. Hur utför man en värdebaserad Order By i MongoDB?