Saya harus menjalankan laporan dari skrip. Script berfungsi dengan baik Perlu menambahkan bidang baru yang menunjukkan apakah pengguna adalah admin atau bukan.

Saya tidak yakin bagaimana menambahkannya dengan kondisi benar atau salah.
Saat ini ia mengembalikan tidak terdefinisi atau salah.

Bidang dalam database mongo adalah yang ini: mongo-database

var orderTotalsByUserId = {}; 
db.orders.aggregate([{ $match: { completed: { $exists: true }, completed: { $gt : new Date('2020-08-01') } } }, { $group: { _id: { userId : "$userId" }, total : { $sum: "$total"} } }]).forEach( d => orderTotalsByUserId[d._id.userId] = d.total )

var userIdsByOrders = db.orders.aggregate([{ $match: { completed: { $exists: true }, completed: { $gt : new Date('2020-08-01') } } }, { $group: { _id: { userId : "$userId" }, total : { $sum: "$total"} } }]).map( d => ObjectId(d._id.userId) )

var customers = {};
db.organizations.find().forEach(c => { customers[c._id.valueOf()] = c });

db.users.find({ _id: { $in: userIdsByOrders } }).forEach(d => print(`${d.firstName}, ${d.lastName}, ${d.profile.email}, ${customers[d.customerId].name},${d.sensitive.active.globalAdmin}, ${(orderTotalsByUserId[d._id.valueOf()] * .01).toFixed(2)}`) )
1
P Purcinelli 10 Mei 2021, 19:43

1 menjawab

Jawaban Terbaik

Setelah beberapa waktu, saya sudah bisa menyelesaikannya. Semoga bisa bermanfaat untuk orang lain.

Pertama-tama, filter bidang featurePermissions di pipeline. Kemudian, buat pernyataan if, yang menunjukkan bahwa jika pengguna memiliki Pelanggan, ia harus mencetak nilai berikut.

Solusinya adalah:

var orderTotalsByUserId = {}; 
db.orders.aggregate([{ $match: { completed: { $exists: true }, completed: { $gt : new Date('2020-08-01') } } }, { $group: { _id: { userId : "$userId" }, total : { $sum: "$total"} } }]).forEach( d => orderTotalsByUserId[d._id.userId] = d.total );

var customers = {};
db.organizations.find().forEach(c => { customers[c._id.valueOf()] = c });

db.users.find({ featurePermissions: { $exists: true } }, { _id: 1, firstName: 1, lastName: 1, profile: 1, customerId: 1, featurePermissions: 1 }).forEach(d => { if (customers[d.customerId]) { print(`${d.firstName}, ${d.lastName}, ${d.profile.email}, ${customers[d.customerId].name}, ${orderTotalsByUserId[d._id.valueOf()] ? (orderTotalsByUserId[d._id.valueOf()] * .01).toFixed(2) : 0 }, ${d.featurePermissions.user_management ? 'true' : 'false' }`)}});
0
P Purcinelli 12 Mei 2021, 16:37