Ich arbeite mit NodeJS auf Google App Engine mit der Datastore-Datenbank.Google Datastore NodeJS kombinieren (Vereinigung) mehrere Sätze von Schlüsseln nur Ergebnisse
Beachten Sie, dass diese Frage eine Erweiterung von (kein Duplikat) my original post ist.
Da Datastore den OR-Operator nicht unterstützt, muss ich mehrere Abfragen ausführen und die Ergebnisse kombinieren.
Hier ist mein Ansatz (bezogen auf die gewählte Antwort von meiner ursprünglichen post):
- Gebrauchs-Schlüssel-only-Abfragen in der 1. Stufe
- Führen Sie die Kombination der in einer einzigen Liste erhalten Tasten (einschließlich Deduplizierung)
- die Unternehmen, die lediglich durch Schlüsselsuche Erhalten
ich habe # 1 durch zwei getrennte Abfragen mit den Asynchron parallel Modul erreicht. Ich brauche Hilfe mit Schritt 2.
Frage: Wie kombiniert (Union) zwei Listen von Entitätsschlüsseln in eine einzige Liste (einschließlich Deduplizierung) effizient?
Der Code, den ich unten habe, führt beide Abfragen erfolgreich aus und gibt zwei Objekte zurück: getEntities.requesterEntities und getEntities.dataownerEntities.
//Requirement: Get entities for Transfer Requests that match either the Requester OR the Dataowner
async.parallel({
requesterEntities: function(callback) {
getEntitiesByUsername('TransferRequest', 'requester_username', loggedin_username, (treqs_by_requester) => {
//Callback pass in response as parameter
callback(null, treqs_by_requester)
});
},
dataownerEntities: function(callback) {
getEntitiesByUsername('TransferRequest', 'dataowner_username', loggedin_username, (treqs_by_dataowner) => {
//Callback pass in response as parameter
callback(null, treqs_by_dataowner)
});
}
}, function(err, getEntities) {
console.log(getEntities.requesterEntities);
console.log(getEntities.dataownerEntities);
//***HOW TO COMBINE (UNION) BOTH OBJECTS CONTAINING DATASTORE KEYS?***//
});
function getEntitiesByUsername(kind, property_type, loggedin_username, getEntitiesCallback) {
//Create datastore query
const treq_history = datastore.createQuery(kind);
//Set query conditions
treq_history.filter(property_type, loggedin_username);
treq_history.select('__key__');
//Run datastore query
datastore.runQuery(treq_history, function(err, entities) {
if(err) {
console.log('Transfer Request History JSON unable to return data results for Transfer Request. Error message: ', err);
} else {
getEntitiesCallback(entities);
}
});
}