MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Mongodb:изчислено connectToField в graphlookup

connectToField е име, а не израз. Не можете да направите нищо с него.

Наистина трябва да преосмислите схемата. Има недостатъци по много начини, като се започне от неуникални имена, използвани в родителските препратки. Тъй като вместо това разчитате на низа на пътя , имате нужда от път за препратка към родителя.

Отговорът по-долу го прави по време на изпълнение и едва ли е препоръчителен за оперативни заявки поради неефективност на производителността и някои предположения за това как е построен пътят. Въпреки това може да се използва като еднократна заявка.

По принцип трябва да създадете изглед с изчислен родителски път:

db.createView("rootless_tree", "tree", [
    { $match: { parent: { $ne: null } } },
    { $addFields: {
        parent_path: { $let: {
            vars: { parents: { $split: [ "$path", "#" ] } },
            in: { $reduce: {
                input: { $slice: [ "$$parents", 1, { $subtract: [ { $size: "$$parents" }, 2 ] } ] },
                initialValue: "",
                in: { $concat: [ "$$value", "#", "$$this" ] }
            } }
        } }
    } }
]);

Така че можете да направите търсенето си, както е посъветвано в предишния ви въпрос:

db.tree.aggregate([
    { $graphLookup: {
        from: "rootless_tree", 
        startWith: "$path", 
        connectFromField: "path", 
        connectToField: "parent_path", 
        as:"dep"
    } },
    { $match: { dep: [] } },                       
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $arrayElemAt

  2. Mongoose извиква geoNear с GeoJSON точки като параметри на заявката, които не работят

  3. Mongoose не актуализира моя документ, ако нямам функция за обратно извикване

  4. mongodb заявка за съпоставяне на всеки елемент в масива doc с условие

  5. Как да превърна MongoDB заявка в JSON?