Google App EngineでDatastoreデータベースを使用してNodeJSを使用しています。Google Datastore NodeJS複数のキーセットを組み合わせるだけの結果
この質問は、(重複しない)my original postの拡張であることに注意してください。
DatastoreはOR演算子をサポートしていないため、複数のクエリを実行して結果を結合する必要があります。ここで
は(私のオリジナルのポストから選択された回答に基づいて)私のアプローチである:第一段階
- 使うキーのみのクエリは、1つのリストに取得したキーの組み合わせを実行します(私は非同期並列モジュールを持つ2つの別々のクエリを実行することで第1位を達成しているだけで、キーのルックアップによって
をエンティティを取得重複排除)
質問:エンティティキーの2つのリストを単一のリスト(重複除外を含む)に効率的に結合する方法はありますか?
以下のコードは両方のクエリを正常に実行し、2つのオブジェクトgetEntities.requesterEntitiesと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);
}
});
}