Sequelize - Wie kann ich nur JSON-Objekte der Datenbankergebnisse zurückgeben?

So möchte ich die Datenbankergebnisse zurückbringen und sonst nichts. Im Moment erhalte ich einen großen Teil der JSON-Daten zurück (wie unten):

Aber ich brauche nur das Attribut [dataValues]. Ich möchte dieses Bit von @ nicht verwenden müssJSON um es abzurufen:tagData[0].dataValues.tagId.

Ich habe gerade bemerkt: Wenn es findet und NICHT ERSTELLEN, es wird das @ zurückgebJSON für die Datenbankergebnisse, aber wenn es FINDET NICHT und erstellt, gibt es den nicht benötigten JSON-Blob zurück (wie unten) Gibt es einen Weg, dies zu umgehen?

[ { dataValues:
     { tagId: 1,
       tagName: '#hash',
       updatedAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT),
       createdAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT) },
    _previousDataValues:
     { tagId: 1,
       tagName: '#hash',
       createdAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT),
       updatedAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT) },
    _changed:
     { tagId: false,
       tagName: false,
       createdAt: false,
       updatedAt: false },
    '$modelOptions':
     { timestamps: true,
       instanceMethods: {},
       classMethods: {},
       validate: {},
       freezeTableName: true,
       underscored: false,
       underscoredAll: false,
       paranoid: false,
       whereCollection: [Object],
       schema: null,
       schemaDelimiter: '',
       defaultScope: null,
       scopes: [],
       hooks: {},
       indexes: [],
       name: [Object],
       omitNull: false,
       sequelize: [Object],
       uniqueKeys: [Object],
       hasPrimaryKeys: true },
    '$options':
     { isNewRecord: true,
       '$schema': null,
       '$schemaDelimiter': '',
       attributes: undefined,
       include: undefined,
       raw: true,
       silent: undefined },
    hasPrimaryKeys: true,
    __eagerlyLoadedAssociations: [],
    isNewRecord: false },
  true ]

Anstatt den großen Blob wie oben zu bekommen, brauche ich nur dasRAW json Ergebnisse (wie unten):

{ tagId: 1,
       tagName: '#hash',
       updatedAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT),
       createdAt: Fri Dec 25 2015 17:07:13 GMT+1100 (AEDT) },

Ich habe folgendes Javascript verwendet. Ich habe versucht, @ hinzufügraw: true, aber es hat nicht funktioniert?

    // Find or create new tag (hashtag), then insert it into DB with photoId relation
module.exports = function(tag, photoId) {
    tags.findOrCreate( { 
        where: { tagName: tag },
        raw: true
    })
    .then(function(tagData){
        // console.log("----------------> ", tagData[0].dataValues.tagId);
        console.log(tagData);
        tagsRelation.create({ tagId: tagData[0].dataValues.tagId, photoId: photoId })
        .then(function(hashtag){
            // console.log("\nHashtag has been inserted into DB: ", hashtag);
        }).catch(function(err){
            console.log("\nError inserting tags and relation: ", err);
        });
    }).catch(function(err){
        if(err){
            console.log(err);
        }
    });

}
Bearbeiten

So habe ich ein bisschen nachgeforscht und es scheint, dass die großeJSON blob wird nur zurückgegeben, wennSequelize erstellt und findet nicht.

Gibt es einen Weg, dies zu umgehen oder nicht?

Edit 2:

Okay, also habe ich eine Problemumgehung gefunden, die in eine wiederverwendbare Funktion umgewandelt werden könnte. Aber wenn es etwas gibt, das in @ eingebaut iSequelize, Das würde ich am liebsten benutzen.

var tagId = "";

// Extract tagId from json blob
if(tagData[0].hasOwnProperty('dataValues')){
    console.log("1");
    tagId = tagData[0].dataValues.tagId;
} else {
    console.log("2");
    console.log(tagData);
    tagId = tagData[0].tagId;
}

console.log(tagId);
tagsRelation.create({ tagId: tagId, photoId: photoId })
Edit 3:

Also, ich glaube nicht, dass es einen "offiziellen" Weg gibt, dies zu erreichen. Ich habe einfach ein benutzerdefiniertes Modul geschrieben, das das @ zurückgibJSON Daten, die benötigt werden. Dieses Modul kann an verschiedene Situationen angepasst und erweitert werden! Wenn jemand Vorschläge hat, wie das Modul verbessert werden kann, kann er dies gerne kommentieren:)

In diesem Modul geben wir ein Javascript-Objekt zurück. Wenn du es in @ verwandeln willJSON Stringifiziere es einfach mitJSON.stringify(data).

// Pass in your sequelize JSON object
module.exports = function(json){ 
    var returnedJson = []; // This will be the object we return
    json = JSON.parse(json);


    // Extract the JSON we need 
    if(json[0].hasOwnProperty('dataValues')){
        console.log("HI: " + json[0].dataValues);
        returnedJson = json[0].dataValues; // This must be an INSERT...so dig deeper into the JSON object
    } else {
        console.log(json[0]);
        returnedJson = json[0]; // This is a find...so the JSON exists here
    }

    return returnedJson; // Finally return the json object so it can be used
}
Edit 4:

So gibt es eine offizielle Sequelize-Methode. Lesen Sie die akzeptierte Antwort weiter unten.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage