2016-10-19 6 views
1

Ich möchte jedes Klickereignis in einem Array in Mongoose speichern und wenn es kein Array gibt, dann wird es ein für mich erstellen. Im Moment speichert es einfach als Objekt dh {x: 954, y: 256}, {x: 254, y: 156} Was ich brauche, ist etwas wie das [{x: 954, y: 256}, {x : 254, y: 156}]Wie Sie Daten in einem Array in Mongoose speichern?

hier ist mein Code:

clickModel Schema

enter code var mongoose = require('mongoose'); 
require('mongoose-double')(mongoose); 
var Schema = mongoose.Schema; 
var integerValidator = require('mongoose-integer'); 
var SchemaTypes = mongoose.Schema.Types; 

var clickPoint = new Schema({ 
    x: { 
     type: SchemaTypes.Double 
    }, 
    y: { 
     type: SchemaTypes.Double 
    }, 
    value: { 
     type: Number, 
     integer: true 
    } 
}); 

clickPoint.plugin(integerValidator); 

//export model... 
module.exports = mongoose.model("ClickPoint", clickPoint); 

und hier ist der Controller, der die Daten

var ClickPoint = require('../Models/point'); 

exports.addPoint = function (click) { 
    var entry = new ClickPoint({ 
     x: click.x, 
     y: click.y, 
     value: click.value 
    }); 

    entry.save(); 
}; 

Dann ist dieses ich nenne spart Add-Point-Funktion ion von app.js

var clickPoint = require('./controllers/clickPoint.controller'); 

app.post('/clickPoint', function (req, res) { 
    clickPoint.addPoint(req.body); 
}); 

Wenn Sie irgendwelche Vorschläge haben, fühlen Sie sich frei bieten sie.

Antwort

2

Aktualisieren Sie das Schema wie folgt -

var clickPoint = new Schema({ 
    clicks: [ 
    x: { 
     type: SchemaTypes.Double 
    }, 
    y: { 
     type: SchemaTypes.Double 
    }, 
    value: { 
     type: Number, 
     integer: true 
    } 
    ] 
}); 

Aktualisieren Sie die Speicherfunktionen

ClickPoint.findOne(function(err, data) { 
    if (!err) { 
    if (data) { 
     data.clicks.push({ 
     x: click.x, 
     y: click.y, 
     value: click.value 
     }) 
     data.save(); 

    } else { 
     new ClickPoint({ 
     clicks: [{ 
      x: click.x, 
      y: click.y, 
      value: click.value 
     }] 
     }); 

     entry.save(); 
    } 
    } 
}); 

Vorschlag - Speichern Sie die Basis Klicks auf Benutzersitzung oder eine Kennung verwenden, um den Client

+0

vielen Dank zu unterscheiden Menge. Es funktioniert jetzt wie erwartet. Können Sie mir bitte sagen, was Sie "basierend auf Benutzersitzung" meinen? Um die Daten in der Datenbank nach Sitzungen oder Anmeldedaten zu gruppieren? – Octtavius

Verwandte Themen