通过cosmos模拟器将数据批量插入cosmos db

时间:2019-04-22 08:47:59

标签: stored-procedures azure-cosmosdb

嗨,我有一个这样创建的示例存储过程

批量插入

function bulkImport(items) {
    var container = getContext().getCollection();
    var containerLink = container.getSelfLink();

var items=[{ 
"UserAccountID":"1236", 
"FirstName": "Sanjeev", 
},{ 
"UserAccountID":"1235", 
"FirstName": "Sanjeev",  
}];

    // The count of imported items, also used as current item index.
    var count = 0;

    // Validate input.
    if (!items) throw new Error("The array is undefined or null.");

    var itemsLength = items.length;
    if (itemsLength == 0) {
        getContext().getResponse().setBody(0);
    }

    // Call the create API to create an item.
    tryCreate(items[count], callback);

    function tryCreate(item, callback) {
        var isAccepted = container.createDocument(containerLink, item, callback);

        if (!isAccepted) getContext().getResponse().setBody(count);
    }


    function callback(err, item, options) {
        if (err) throw err;

        // One more item has been inserted, increment the count.
        count++;

        if (count >= itemsLength) {
            // If we created all items, we are done. Just set the response.
            getContext().getResponse().setBody(count);
        } else {
            // Create next document.
            tryCreate(items[count], callback);
        }
    }
}

如何在波斯菊模拟器中执行此sp。如何为每个项目唯一地设置分区键。

由于分区键应该是唯一的,因此我们在执行时不能提供单个分区键。

1 个答案:

答案 0 :(得分:0)

首先,如果不需要,您可以在cosmos数据库中创建未分区的集合。门户网站有一些限制,但sdk允许。您可以参考我以前的案例:Is it still a good idea to create comos db collection without partition key?

第二,存储过程的批量导入不适合分区集合,因为您需要为存储过程的每次执行提供pk。请参考以下链接:Azure Cosmos DB asking for partition key for stored procedure

最后,还有许多其他解决方案可将数据导入cosmos db,例如Azure Cosmos DB Data migration tool,值得您尝试。