我正在使用重复密钥的Mongo文档,
{
"_id" : ObjectId("576a3b4a2bf2bc22bccb80ec"),
"Name" : "User1",
"Name" : "User2"
}
{
"_id" : ObjectId("576a3b4a2bf2bc22bccb80ab"),
"Name" : "User2",
"Name" : "User1"
}
当我尝试查询Name为“User1”时。我总是只得到一份文件。但结果应该是两个文件。有没有办法让我得到正确的结果?
提前致谢
注意:我知道我的设计是错误的我只是想让它成功。
答案 0 :(得分:2)
MongoDB中的集合中不能有两个具有相同名称的字段。 当您尝试插入具有相同键的两个字段的文档时,MongoDB将使用最新值进行更新,而不是创建单独的字段。
示例:
db.test.insert({'Name':'user1','Name':'user2'})
db.test.insert({'Name':'user2','Name':'user1'})
将导致插入2个文档,如下所示
{ "_id" : ObjectId("576a8b4731157693143d0571"), "Name" : "user2" }
{ "_id" : ObjectId("576a8b5531157693143d0572"), "Name" : "user1" }
答案 1 :(得分:0)
请注意,根据文档,可能有重复的键名,但是根据驱动程序,您可能无法插入或读取此类数据:
BSON文档可能有多个具有相同名称的字段。但是,大多数MongoDB接口都表示MongoDB具有不支持重复字段名称的结构(例如哈希表)。如果需要处理具有多个同名字段的文档,请参见驱动程序的驱动程序文档。
(来源:https://docs.mongodb.com/manual/core/document/#field-names)
不幸的是,为了更正现有数据,您将不得不使用可以处理重复键的驱动程序。
答案 2 :(得分:0)
db.collection_name.find({"Name" : "User1"})
答案 3 :(得分:-1)
对于集合,MongoDB中的ObjectId
是唯一的,因为它充当该集合的主键。根据{{3}}您在同一个集合中永远不会有两个文档具有相同的ObjectId
。
但是对于不同的集合,可能会有相同的ObjectID
。在这种情况下,查询你时显然必须提到集合名称。
希望这有帮助