我使用Mongo API进行了CosmosDB设置。我在文档的一个字段上有一个带有散列碎片的集合。当我运行db.collection.remove
或db.collection.deleteMany
等命令时,我收到以下错误。
Command deleteMany failed: query in command must target a single shard key.: {"message":"Command deleteMany failed: query in command must target a single shard key."}
我不确定如何将查询作为查询的一部分提及分片密钥,我希望查询能够在所有分片中运行。
答案 0 :(得分:1)
如果要运行db.collection.remove
或db.collection.deleteMany
等命令,则需要提供共享密钥。
例如:
我的数据来源如下:
[
{
"id" : "2",
"name" : "b"
},
{
"id" : "1",
"name" : "a"
}
]
我的共享密钥是"/name"
。使用db.coll.deleteMany({"name":"a"})
删除特定分片。
希望它对你有所帮助。
答案 1 :(得分:0)
应该是您在创建cosmosDb集合时选择的ShardKey。
FilterDefinition<Product> filter = Builders<Product>.Filter.Eq("id", 2);
=== 2
是我的shardKey
await this._dbContext.GetProducts.DeleteOneAsync(filter);
return RedirectToAction("Index");
请参考下面的图像,它在CosmosDB中的外观如何
答案 2 :(得分:0)
Shard Key(分区键)。提供后,我们可以像往常一样执行常规操作,例如保存,更新和删除。
示例:
const mySchema = new Schema({
requestId: { type: String, required: true },
data: String,
documents: [{ docId: String, name: String, attachedBy: String }],
updatedBy: {
type: {
name: { type: String, required: true },
email: { type: String, required: true },
}, required: true
},
createdDate: { type: Date, required: true },
updatedDate: { type: Date },
}, { shardKey: { requestId: 1 } }
);
在上面的代码中,我们将requestId指定为Shard Key,现在我们可以执行任何mongo操作 示例:
let request:any = await myModel.findById(requestId);
request.data ="New Data";
await request.save();
希望有帮助。
这适用于所有Mongo操作