Mangouste Requête: Trouver un élément dans un tableau

Mangouste/Mongo noob ici:

Mes Données

Voici mon simplifiée des données, chaque utilisateur possède son propre document

{ "__v" : 1,
"_id" : ObjectId( "53440e94c02b3cae81eb0065" ),
"email" : "[email protected]",
"firstName" : "testFirstName",
"inventories" : [ 
{ "_id" : "active",
"tags" : [ 
"inventory", 
"active", 
"vehicles" ],
"title" : "activeInventory",
"vehicles" : [ 
{ "_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" } ] } ] }, 
{ "title" : "soldInventory",
"_id" : "sold",
"vehicles" : [],
"tags" : [ 
"inventory", 
"sold", 
"vehicles" ] }, 
{ "title" : "deletedInventory",
"_id" : "deleted",
"vehicles" : [],
"tags" : [ 
"inventory", 
"sold", 
"vehicles" ] } ] }

Comme vous pouvez le voir, chaque utilisateur dispose d'un inventories propriété qui est un tableau qui contient 3 stocks (activeInventory, soldInventory et deletedInventory)

Ma Requête

Donné un email de l'utilisateur d'un véhicule ID, je voudrais que ma requête à aller par le biais de recherche de l'utilisateur activeInventory et de renvoyer simplement le véhicule qui correspond à l'ID. Voici ce que j'ai à ce jour:

user = api.mongodb.userModel;
ObjectId = require('mongoose').Types.ObjectId;
return user
.findOne({email : params.username})
.select('inventories')
.find({'title': 'activeInventory'})
//also tried
//.where('title')
//.equals('activeInventory')
.exec(function(err, result){
console.log(err);
console.log(result);
});

Avec cette, résultat sort comme un tableau vide. J'ai aussi essayé de .find('inventories.title': 'activeInventory') qui étrangement retourne l'ensemble des stocks de tableau. Si possible, j'aimerais garder le chaînage format de la requête que je trouve ça beaucoup plus lisible.

Mon Idéal Requête

return user
.findOne({email : params.username})
.select('inventories')
.where('title')
.equals('activeInventory')
.select('vehicles')
.id(vehicleID)
.exec(cb)

Évidemment ça ne fonctionne pas, mais il peut vous donner une idée de ce que je suis en train de faire.

OriginalL'auteur NicolasMoise | 2014-04-08