0

我有这个文档结构,属性“名称”在所有文档中必须是唯一的,如上所示:

{ 
    "_id" : ObjectId("56686341d6389c004c689d5d"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "John"
        },
        "B2" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary"
        }
    }
}

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

可以用这种结构创建唯一索引吗?

4

1 回答 1

1

是的,您必须在Bosses.Name. 但是,您将不得不稍微更改您的架构。Bosses应该是一个数组:

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : [
        {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

如果你真的需要B1,我建议你将它添加到Bosses对象中:“代码”:“B1”。但这可能不是必需的,因为您可以通过以下方式访问数组中的索引...find({ "Bosses.0.Name" })

于 2015-12-09T18:05:58.457 回答