如何使用重复键查询MongoDB文档?

时间:2016-06-22 08:09:37

标签: mongodb

我正在使用重复密钥的Mongo文档,

{
    "_id" : ObjectId("576a3b4a2bf2bc22bccb80ec"),
    "Name" : "User1",
    "Name" : "User2"
}

{
    "_id" : ObjectId("576a3b4a2bf2bc22bccb80ab"),
    "Name" : "User2",
    "Name" : "User1"
}

当我尝试查询Name为“User1”时。我总是只得到一份文件。但结果应该是两个文件。有没有办法让我得到正确的结果?

提前致谢

注意:我知道我的设计是错误的我只是想让它成功。

4 个答案:

答案 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。在这种情况下,查询你时显然必须提到集合名称。

希望这有帮助