首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB切分findAndModify

MongoDB切分findAndModify
EN

Stack Overflow用户
提问于 2012-10-19 22:10:50
回答 2查看 6.1K关注 0票数 1

我正在尝试分割我的数据库,但是我对findAndModify有一个问题。

我有一个类似于以下(MyCollection)的模式:

代码语言:javascript
复制
{
    "_id": "508206a9f6ded00c50f59469"
    "DatabaseId" : 91,
    "TypeId" : "5e62603c-8",
    "ItemId" : "734",
    "UserId" : "d14e3afd-d8b3-4c37-87cd-db5d89291c44"
}

我把我的剪刀调成这样:

代码语言:javascript
复制
db.runCommand({enablesharding:"myDb"});
db.runCommand({
    shardcollection: "myDb.myCollection",
    key: {
        "DatabaseId" : 1,
        "TypeId" : 1,
        "ItemId" : 1
    }
});

假设上面的模式被插入到数据库中。

现在我运行以下查询:

代码语言:javascript
复制
db.myCollection.findAndModify({
    query: {
        "DatabaseId" : 91,
        "TypeId" : "5e62603c-8",
        "ItemId" : "734",
        "UserId" : "d14e3afd-d8b3-4c37-87cd-db5d89291c44"
    },
    remove: true
});

我从运行findAndModify时得到了这个错误:

代码语言:javascript
复制
findAndModifyFailed failed: {
    "errmsg" : "exception: query for sharded findAndModify must have shardkey",
    "code" : 13343,
    "ok" : 0
}

有人能向我解释一下为什么会这样说吗?或者解决这个问题?在我看来,我正在做我需要做的一切。

EN

回答 2

Stack Overflow用户

发布于 2012-10-19 23:57:15

您的碎片密钥有三个字段: databaseId、typeId和itemId。

Mongo告诉你,你不能只用findAndModify做databaseId。我也不知道原因。

你需要这样的东西:

代码语言:javascript
复制
db.myCollection.findAndModify({
query: {
    "DatabaseId" : 91,
    "TypeId": "blah",
    "itemId": "foo"
    "GroupId" : "5e62603c-8",
    "Identifier" : "734",
    "UserId" : "d14e3afd-d8b3-4c37-87cd-db5d89291c44"
},
remove: true

});

票数 2
EN

Stack Overflow用户

发布于 2012-10-21 06:36:11

关于ptyx的回答是:

文档 on findAndModify表示,如果查询不包含碎片键,它将失败。由于您使用的是复合碎片键,因此可能需要在查询中包含所有三个字段。(见底部的红色段落)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12983162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档