sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoose Query:Find et element inde i en matrix

Brug af $ positionsoperatør, kan du få resultaterne. Men hvis du har flere elementer i vehicles array vil alle blive returneret i resultatet, da du kun kan bruge én positionsoperator i projektionen, og du arbejder med 2 arrays (den ene inde i den anden).

Jeg vil foreslå, at du tager et kig på aggregation framework , da du får meget mere fleksibilitet. Her er et eksempel forespørgsel til dit spørgsmål, der kører i skallen. Jeg er ikke bekendt med mongoose, men jeg gætter på, at dette stadig vil hjælpe dig, og du vil være i stand til at oversætte det:

db.collection.aggregate([
    // Get only the documents where "email" equals "[email protected]" -- REPLACE with params.username
    {"$match" : {email : "[email protected]"}}, 
    // Unwind the "inventories" array
    {"$unwind" : "$inventories"}, 
    // Get only elements where "inventories.title" equals "activeInventory"
    {"$match" : {"inventories.title":"activeInventory"}}, 
    // Unwind the "vehicles" array
    {"$unwind" : "$inventories.vehicles"}, 
    // Filter by vehicle ID -- REPLACE with vehicleID 
    {"$match" : {"inventories.vehicles._id":ObjectId("53440e94c02b3cae81eb0069")}}, 
    // Tidy up the output
    {"$project" : {_id:0, vehicle:"$inventories.vehicles"}}
])

Dette er outputtet, du får:

{
        "result" : [
                {
                        "vehicle" : {
                                "_id" : ObjectId("53440e94c02b3cae81eb0069"),
                                "tags" : [
                                        "vehicle"
                                ],
                                "details" : [
                                        {
                                                "_id" : ObjectId("53440e94c02b3cae81eb0066"),
                                                "year" : 2007,
                                                "transmission" : "Manual",
                                                "price" : 1000,
                                                "model" : "Firecar",
                                                "mileageReading" : 50000,
                                                "make" : "Bentley",
                                                "interiorColor" : "blue",
                                                "history" : "CarProof",
                                                "exteriorColor" : "blue",
                                                "driveTrain" : "SWD",
                                                "description" : "test vehicle",
                                                "cylinders" : 4,
                                                "mileageType" : "kms"
                                        }
                                ]
                        }
                }
        ],
        "ok" : 1
}


  1. Ingen Json-deserializer fundet for typen Option[reactivemongo.bson.BSONObjectID]

  2. MongoDB aggregat/gruppe/sum-forespørgsel oversat til pymongo-forespørgsel

  3. Betinget Redis indstillet / kun opdatering med nyeste version?

  4. Hvordan udfører jeg en forespørgsel i Mongoose?