Stored procedures Cosmos DB:getContext().getCollection().queryDocuments不返回SP中的项
我刚开始使用Cosmos DB,我很困惑为什么我不能使用简单的SP查询返回任何文档 这就是我所做的:Stored procedures Cosmos DB:getContext().getCollection().queryDocuments不返回SP中的项,stored-procedures,azure-cosmosdb,Stored Procedures,Azure Cosmosdb,我刚开始使用Cosmos DB,我很困惑为什么我不能使用简单的SP查询返回任何文档 这就是我所做的: 已使用分区键“/id”创建Cosmos DB数据库 创建“系列”目录 创建了两个项目: 运行查询“SELECT*FROM c”将按预期返回两条记录 但是,bellow SP中的queryDocuments方法总是为提要检索零长度。为什么两件东西都没有退回 非常感谢你的帮助 Cosmos db中的SP基于分区密钥工作,这意味着将返回分区内的所有文档,而不是跨分区的文档。您可以按照下面的屏幕
- 已使用分区键“/id”创建Cosmos DB数据库
- 创建“系列”目录
- 创建了两个项目:
- 运行查询“SELECT*FROM c”将按预期返回两条记录
- 但是,bellow SP中的queryDocuments方法总是为提要检索零长度。为什么两件东西都没有退回
非常感谢你的帮助 Cosmos db中的SP基于分区密钥工作,这意味着将返回分区内的所有文档,而不是跨分区的文档。您可以按照下面的屏幕截图执行SP。根据官方文档“对于分区容器,在执行存储过程时,必须在请求选项中提供分区键值。存储过程的作用域始终为分区键值。具有不同分区键值的项对存储过程不可见。这也适用于触发器。”
存储过程的作用域始终是分区键。您应该提供分区键值,如:'AndersenFamily'。您可以参考这个。谢谢,@SteveZhao!这就解释了!谢谢你,@AnuragSharma MSFT,这就解释了!
{
"id": "AndersenFamily",
"lastName": "Andersen",
"parents": [
{
"firstName": "Thomas"
},
{
"firstName": "Mary Kay"
}
],
"children": [
{
"firstName": "Henriette Thaulow",
"gender": "female",
"grade": 5,
"pets": [
{
"givenName": "Fluffy"
}
]
}
],
"address": {
"state": "WA",
"county": "King",
"city": "Seattle"
},
"creationDate": 1431620472,
"isRegistered": true
},
{
"id": "WakefieldFamily",
"parents": [
{
"familyName": "Wakefield",
"givenName": "Robin"
},
{
"familyName": "Miller",
"givenName": "Ben"
}
],
"children": [
{
"familyName": "Merriam",
"givenName": "Jesse",
"gender": "female",
"grade": 1,
"pets": [
{
"givenName": "Goofy"
},
{
"givenName": "Shadow"
}
]
},
{
"familyName": "Miller",
"givenName": "Lisa",
"gender": "female",
"grade": 8
}
],
"address": {
"state": "NY",
"county": "Manhattan",
"city": "NY"
},
"creationDate": 1431620462,
"isRegistered": false
}
// SAMPLE STORED PROCEDURE
function sample(prefix) {
// Query documents and take 1st item.
var isAccepted = getContext().getCollection().queryDocuments(
getContext().getCollection().getSelfLink(),
'SELECT * FROM root r',
function (err, feed, options) {
if (err) throw err;
console.log("Feed length: " + feed.length);
// Check the feed and if empty, set the body to 'no docs found',
// else take 1st element from feed
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var response = getContext().getResponse();
var body = { prefix: prefix, feed: feed[0] };
response.setBody(JSON.stringify(body));
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}