1

ドキュメントからサブアイテムを削除するにはどうすればよいですか。たとえば、sales というドキュメントがあり、各 sales には {name,price,code} を含む sale.item があるとします。

コードの空白またはnullをチェックして、無効な各アイテムを削除したいと思います。

以下のようなことをしようとすると、エラーで失敗します。サブクエリを使用する必要があるかどうか、およびその方法がわかりません。

FOR sale in sales
FOR item in sale.items
    FILTER item.code == ""
REMOVE item IN sale.items

別の試み

FOR sale in sales
    LET invalid = (
        FOR item in sale.items
            FILTER item.code == ""
        RETURN item
    )

REMOVE invalid IN sale.items LET removed = OLD RETURN removed
4

2 に答える 2

3

次のクエリは、 内の各ドキュメントのアイテムを再構築しますsalesnullコードが空の文字列ではなく、空の文字列ではないアイテムのみを保持します。

FOR doc IN sales 
  LET newItems = (
    FOR item IN doc.items 
      FILTER item.code != null && item.code != '' 
      RETURN item
    ) 
  UPDATE doc WITH { items: newItems } IN sales

使用したテストデータは次のとおりです。

db.sales.insert({ 
  items: [ 
    { code: null, what: "delete-me" }, 
    { code: "", what: "delete-me-too" }, 
    { code: "123", what: "better-keep-me" }, 
    { code: true, what: "keep-me-too" }
  ]
});
db.sales.insert({ 
  items: [ 
    { code: "", what: "i-will-vanish" },
    { code: null, what: "i-will-go-away" },
    { code: "abc", what: "not me!" }
  ]
});
db.sales.insert({ 
  items: [ 
    { code: "444", what: "i-will-remain" },
    { code: null, what: "i-will-not" }
  ]
});
于 2015-04-01T17:46:09.177 に答える