Our Partner & Developer boards on the community are moving to a brand new home: the .dev community forums! While you can still access past discussions here, for all your future app and storefront building questions, head over to the new forums.

MetafieldsSet query as bulk operation/mutation

Solved

MetafieldsSet query as bulk operation/mutation

SilasGrygier
Shopify Partner
19 2 7

Is the metafieldsSet query available as a bulk query? The documentation for bulk import is unclear as to whether or not you can create metafields using bulk queries. The metafieldsSet query is listed as a bulk mutation under the Limitations header of the docs but a little bit further down under the section Create a bulk mutation it only mentions product & collection mutations, if someone could clarify this it would be highly appreciated.

 

I have read that it's possible to bulk create/update metafields using the productUpdate mutation but this seems more cumbersome because you have to include the metafield id which I want to avoid by using the metafieldsSet query if that is somehow possible. 

 

 

 

 

Accepted Solution (1)

Umiko
Shopify Staff
42 8 14

This is an accepted solution.

Hi @SilasGrygier 👋

 

The  `metafieldsSet` mutation is supported as a bulk operation with `bulkOperationRunMutation`. You should be able to pass the below in a string format, as the `mutation` argument. Keep in mind that the uploaded JSONL file will need to contain `MetafieldSetInput` objects as well.

 

mutation call($metafields: [MetafieldsSetInput!]!) {
    metafieldsSet(metafields: $metafields) {
        metafields {
            key
            namespace
            value
            createdAt
            updatedAt
        }
    }
}

 

Hope that helps!

Umiko | API Support @ Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit Shopify.dev or the Shopify Web Design and Development Blog

View solution in original post

Replies 3 (3)

Umiko
Shopify Staff
42 8 14

This is an accepted solution.

Hi @SilasGrygier 👋

 

The  `metafieldsSet` mutation is supported as a bulk operation with `bulkOperationRunMutation`. You should be able to pass the below in a string format, as the `mutation` argument. Keep in mind that the uploaded JSONL file will need to contain `MetafieldSetInput` objects as well.

 

mutation call($metafields: [MetafieldsSetInput!]!) {
    metafieldsSet(metafields: $metafields) {
        metafields {
            key
            namespace
            value
            createdAt
            updatedAt
        }
    }
}

 

Hope that helps!

Umiko | API Support @ Shopify 
 - Was my reply helpful? Click Like to let me know! 
 - Was your question answered? Mark it as an Accepted Solution
 - To learn more visit Shopify.dev or the Shopify Web Design and Development Blog

Alaxandros
Shopify Partner
19 0 9

I'm performing this bulk update right now. I think I have the shape of my jsonl file wrong. An example line from my file:

{"input": {"metafields": [{"key": "aims_sku", "value": "SGSKCAT_OWHT_OS", "namespace": "custom", "ownerId": "gid://shopify/productVariant/37140809220272", "type": "single_line_text_field"}, {"key": "gs1_gtin", "value": "00198465367131", "ownerId": "gid://shopify/productVariant/37140809220272", "type": "single_line_text_field", "namespace": "custom"}]}}

 

But based on the MetafieldSetInput object you referenced, am I only allowed to have one metafield per line, and each line should look like:

 

{"input": {"key": "aims_sku", "value": "SGSKCAT_OWHT_OS", "namespace": "custom", "ownerId": "gid://shopify/productVariant/37140809220272", "type": "single_line_text_field"}}

 

or is it something else?

Schmidtc63
Shopify Partner
101 14 29

 

mutation call($metafields: [MetafieldsSetInput!]!) {
    metafieldsSet(metafields: $metafields) {
        metafields {
            key
            namespace
            value
            createdAt
            updatedAt
        }
    }
}

And your input should look like this:

 

{"metafields":[{"key": "price", "value": "25.55","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979786990", "type":"number_decimal"},   {"key": "compare_at_price", "value": "36.5","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979786990", "type":"number_decimal"}]}
{"metafields":[{"key": "price", "value": "25.55","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979819758", "type":"number_decimal"},   {"key": "compare_at_price", "value": "36.5","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979819758", "type":"number_decimal"}]}
{"metafields":[{"key": "price", "value": "25.55","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979852526", "type":"number_decimal"},   {"key": "compare_at_price", "value": "36.5","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979852526", "type":"number_decimal"}]}
{"metafields":[{"key": "price", "value": "25.55","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979885294", "type":"number_decimal"},   {"key": "compare_at_price", "value": "36.5","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979885294", "type":"number_decimal"}]}
{"metafields":[{"key": "price", "value": "25.55","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979918062", "type":"number_decimal"},   {"key": "compare_at_price", "value": "36.5","namespace": "kickee", "ownerId": "gid://shopify/ProductVariant/43114979918062", "type":"number_decimal"}]}

 

Basically, you don't need the {"input": container

 

Hope that helps!