Saya mencoba menggabungkan beberapa kueri menjadi satu objek: pengguna dapat membuat kueri dari opsi yang telah dipilih sebelumnya dan memilih operator dan atau atau. Semua kueri dikeluarkan dengan benar tetapi ketika memasukkannya ke dalam objek saya mendapatkan "Kesalahan: $and/$or/$nor must be nonempty array".

Misalnya. Katakanlah kita memiliki kueri a AND b AND c AND d AND e outputnya harus: {$and[a,$and:[b,$and:[c,$and:[d,e]]]]} this sehingga jika mereka memilih operator lain, operasinya tetap sama

Berikut kodenya:

function nestOps(ops, queries) {
  let queryObj = {};
  if (ops.length > 1) {
    let querySet = {};
    querySet[`$${ops[ops.length - 1]}`] = [queries[ops.length - 1], queries[ops.length]];
    for (let i = ops.length - 2; i > 0; i--) {
      let next = {};
      next[`$${ops[i]}`] = querySet;
      querySet = {};
      let nextIdx = i - 1;

      if (nextIdx > 0) {
        querySet[`$${ops[nextIdx]}`] = [queries[i], next];
        i--;
      }
      else {
        querySet = next;
      }
    }


    queryObj[`$${ops[0]}`] = [querySet, queries[0]];
  }
  else {
    queryObj[`$${ops[0]}`] = [...queries];
  }
  return queryObj;
}

Saya telah mencoba melakukannya melalui rekursi namun, tumpukan saya cukup membengkak (bahkan dengan ukuran tumpukan meningkat) dan saya tidak dapat melihat bagaimana menggunakan metode tailing ("return nextCall()") karena saya harus mengembalikan kueri sebelumnya dan ditambahkan atau diurutkan dan saya tidak bisa melakukannya tanpa tugas terlebih dahulu.

Berikut adalah output konsol:

Output Object
$and: Array(2)
0:
  $and: Array(2)
  0: {questions: {…}}
  1:
   $and: // could be an error here but, I don't understand why
   $and: Array(2)
    0: {$or: Array(2)} //this happens due to a query, it is not an error
    1: {questions: {…}}
Operators
["and", "and", "and", "and"]

Queries
(5) [{…}, {…}, {…}, {…}, {…}]
  0: {questions: {…}}
  1: {completedAt: {…}}
  2: {questions: {…}}
  3: {$or: Array(2)}
  4: {questions: {…}}
0
Pharez 28 Oktober 2019, 15:00

1 menjawab

Jawaban Terbaik

Alih-alih membuat $and bersarang, Anda dapat menyederhanakannya menggunakan $and tunggal.

{ property: { $and: [ {filter}, {filter} ] }}
0
Shihab 28 Oktober 2019, 13:59