Comparez les prix des domaines et des services informatiques des vendeurs du monde entier

Comment obtenir des données de la matrice dans mongoose?

Je suis nouveau à B. mongoose node.js et mongoDB, J'ai un tel schéma dB comme


Project:{
projectName:"String",
projectManager:"String",
task:[{
taskName:"String",
timetakeninhrs:"String"
}]
};


Par conséquent, je veux obtenir uniquement les détails de la tâche avec un nom de tâche spécifique.
J'écris un script sql, Donc tu sais ce que je veux :


Select taskname,timetakeninhrs from project where taskName ='DB create';
Invité:

Gabriel

Confirmation de:

Opérateur
https://docs.mongodb.org/manua ... atch/
Projections
$elemMatch

Ce serait utile pour cela:


Project
.where/'task.taskName', 'DB create'/ // or where/'task.taskName'/.equals/'DB create'/.
.select/{_id: 0, task: {$elemMatch: {'taskName': 'DB create'}}/
.exec/function/err, docs/{
var tasks = docs.map/function/doc/{ return doc.task[0]; }/;
console.log/tasks[0].taskName/; // 'DB create'
console.log/tasks[0].timetakeninhrs/; // '3'
}/;


Au dessus
http://mongoosejs.com/docs/api ... where
méthode
where//

Agit comme un modèle statique auxiliaire Mongoose, qui construit une requête à l'aide d'une syntaxe de chaîne et n'indique pas l'objet JSON. Alors


// instead of writing:
Project.find/{ 'task.taskName': 'DB create' }, callback/;

// you can instead write:
Project.where/'task.taskName', 'DB create'/;

// or
Project.where/'task.taskName'/.equals/'DB create'/;


puis connectez la méthode
http://mongoosejs.com/docs/api ... elect
dans la chaîne pour diffuser le champ de la matrice 'task' par
https://docs.mongodb.org/manua ... atch/
. DANS
http://mongoosejs.com/docs/api ... -exec
Méthode
exec//

/qui effectue la demande de manière asynchrone/ Vous devez transmettre le rappel qui suit le modèle
callback/error, results/

. Le résultat dépend de l'opération: pour

findOne//


Ceci est un document d'unité potentiellement nul,

find//


Liste des documents

count//


Nombre de documents

update//


Le nombre de documents concernés, etc. Dans ce cas, une gamme de documents dans le format est renvoyé:


[
/* 0 */
{
"task" : [
{
"taskName" : "DB create",
"timetakeninhrs" : "3"
}
]
},
/* 1 */
{
"task" : [
{
"taskName" : "DB create",
"timetakeninhrs" : "9"
}
]
}
/* etc */
]


Dans le rappel, vous pouvez manipuler un peu de données pour obtenir un objet qui n'a que les propriétés que vous avez indiquées, par conséquent, en utilisant votre propre
https://developer.mozilla.org/ ... y/map
Les fonctions JavaScript
map//

Pour créer une nouvelle gamme d'objets avec ces champs

Gregoire

Confirmation de:

Je crée cet exemple qui peut vous aider:


var async=require/'async'/;
var mongoose = require/'mongoose'/;
var Schema = mongoose.Schema;
var uri = 'mongodb://localhost/myDb';
mongoose.connect/uri/;

// define a schema
var ProjectSchema = new Schema/{
projectName: "String",
projectManager: "String",
task: [{
taskName: "String",
timetakeninhrs: "String"
}]
}/;

// compile our model
var Project = mongoose.model/'Project', ProjectSchema/;

// create a documents
var Project01 = new Project/{
projectName: "Project01",
projectManager: "Manager01",
task: [{
taskName: "tsk01_Project01",
timetakeninhrs: "1111-1111"
}, {
taskName: "tsk02_Project01",
timetakeninhrs: "1111-2222"
}, {
taskName: "tsk03_Project01",
timetakeninhrs: "1111-3333"
}, {
taskName: "tsk04_Project01",
timetakeninhrs: "1111-4444"
}]
}/;

var Project02 = new Project/{
projectName: "Project02",
projectManager: "Manager02",
task: [{
taskName: "tsk01_Project02",
timetakeninhrs: "2222-1111"
}, {
taskName: "tsk02_Project02",
timetakeninhrs: "2222-2222"
}, {
taskName: "tsk03_Project02",
timetakeninhrs: "2222-3333"
}, {
taskName: "tsk04_Project02",
timetakeninhrs: "2222-4444"
}]
}/;

//delete existing documents and create them again
Project.remove/{}, function// {
Project01.save/function// {
Project02.save/function// {
//for example we find taskName: "tsk03_Project02"
Project.find/{'task': {$elemMatch: {taskName: "tsk03_Project02"}}},'task.taskname task.timetakeninhrs',function/err, docs/ {
if /!err/ {
console.log/docs/;
}
}/;
}/;
}/;
}/;

Pour répondre aux questions, connectez-vous ou registre