私はMongoDBデータベースに2つのコレクション、CustomerとOrderを持っています。 Loopbackにおけるこれらのモデルの関係は、顧客-hasMany-> Order & Order -belongsTo-> Customer(注文にはforeignKey customerIdがあるため)です。 たとえば、20歳のすべての顧客の注文を照会する必要がありました。しかし、私はループバックがこの種のクエリをサポートしていないことに気づいたことに驚きました。私は多くを検索し、 "include"オプションでさえ、最終結果として取得したいフォーマットをサポートせず、年齢機能(Loopback-doc-about-it)までフィルタに結合できません。次に、私は2つのクエリを作成するリモートメソッドを書いた:最初のものは、特定の年齢を持つすべての顧客を見つけ出す(基本はフィルタ)、もう1つはリスト内のすべての顧客を繰り返して注文を見つける(基本的に各インデックスについて、インデックスの顧客のIDと同じ得意先コードしているものの受注コレクション)にループバック:非同期ではない複数のコレクションの照会
はここcustomer.jsファイルです:
'use strict';
module.exports = function(Customer) {
var app = require('../../server/server');
/**
*
* @param {number} age
* @param {Function(Error, array)} callback
*/
Customer.getOrdersByAge= function(age, callback) {
var customers;
var filter= { where: { 'age': age } };
var Order=app.models.Order;
var orders;
var elementary_orders;
Customer.find(filter, function(err, items) {
if (err !==null){
console.log("error1");
return callback(err);
}
console.log("items: "+ items);
customers=items;
for (let i of customers){
console.log(i+": "+i.id+" -lenght: "+customers.length);
var filter_order= { where: { 'customerId': i.id+'' } };
Order.find(filter_order, function(err2, items_orders) {
if (err2 !==null){
console.log(i+": "+"error2");
return callback(err2);
}
elementary_orders= items_orders;
orders=elementary_orders;
console.log("elementary_orders: "+ elementary_orders);
console.log("orders now: "+ elementary_orders);
});
}
console.log("-> orderssss: "+ orders);
callback(null,orders);
});
}
};
しかし、その後、私は別の問題を発見し、受注は、常に定義されていません。 「検索」クエリは非同期であるため、注文は未定義のままです。だから、私はそれを同期させる方法を探したが(ループバックの精神は常に非同期であるため不可能だった)、npmの流れを制御する方法(async packageしかしeachOfユーティリティを試しても注文は未定義である)
私はこの簡単なクエリを動作させる方法だけでなく、実装が不可能な理由を知りたいと思いますか?ループバックのモデルや何かに関連する概念的なパターンやアーキテクチャのパターンに違反していますか? 、しかし。
ありがとうございました:)
ありがとう、@ Sonicd300。私はコードを変更しましたが、明らかに設定できません( TypeError:getterのみを持つ#のプロパティオーダーを設定できません)、elementary_ordersを使用しても機能しません。 –
amiraba
モデルを通過する必要はありませんむしろあなたのペイロードを返す。 – Sonicd300
しかし、そのコードのcustomer.ordersはそれを参照しています – amiraba