在MongoDB中,on如何获取嵌入文档字段中的值,但如何基于不同的值进行查询

在MongoDB中,on如何获取嵌入文档字段中的值,但如何基于不同的值进行查询,mongodb,mongoid,nosql,Mongodb,Mongoid,Nosql,我有这样一个基本结构: > db.users.findOne() { "_id" : ObjectId("4f384903cd087c6f720066d7"), "current_sign_in_at" : ISODate("2012-02-12T23:19:31Z"), "current_sign_in_ip" : "127.0.0.1", "email" : "something@gmail.com", "encrypted_password"

我有这样一个基本结构:

> db.users.findOne()
{
    "_id" : ObjectId("4f384903cd087c6f720066d7"),
    "current_sign_in_at" : ISODate("2012-02-12T23:19:31Z"),
    "current_sign_in_ip" : "127.0.0.1",
    "email" : "something@gmail.com",
    "encrypted_password" : "$2a$10$fu9B3M/.Gmi8qe7pXtVCPu94mBVC.gn5DzmQXH.g5snHT4AJSZYCu",
    "last_sign_in_at" : ISODate("2012-02-12T23:19:31Z"),
    "last_sign_in_ip" : "127.0.0.1",
    "name" : "Trip Jameson",
    "sign_in_count" : 100,
    "usertimes" : [
        ...thousands and thousands of records like this one....
        {
            "enddate" : 348268392.115282,
            "idle" : 0,
            "startdate" : 348268382.116728,
            "title" : "My Awesome Title"
        },
    ]
}
因此,我只想找到单个用户的usertimes,其中标题是“我的精彩标题”,然后我想看看该记录中“idle”的值是多少

到目前为止,我所能找到的是,我可以通过以下搜索找到整个用户记录:

> db.users.find({'usertimes.title':"My Awesome Title"})
但这只是返回整个用户记录,这对我来说是无用的。我误解了什么吗?

使用:

db.users.find({'usertimes.title':“我最棒的标题”},{'idle':1})


我建议您更详细地看一下,它会为您解释的。

仅返回部分嵌入文档目前不受MongoDB支持 将始终返回匹配的用户记录(至少是当前MongoDB版本)

类似的参考请参见此问题

我是MongoDB空间的记者Jira


它只是返回:{“_id”:ObjectId(“4f384903cd087c6f720066d7”)}用户的id,仍然没有给我任何关于用户时间的信息。那么我一定是误解了什么。如果我们无法从嵌入的记录中获取值,MongoDB将如何发挥作用?对于某些用户,此数组可能包含数百万条记录,我不会将其放在内存中进行解析。您可以使用更传统的方法,其中有一个集合用户,另一个
usertimes
和一个字段
user\u id
,其中包含用户的id。这与应用RDMS的设计相同。2.1()中有一个新的聚合框架,它可能部分满足您的需要。我想这里的问题是,我不应该实际嵌入它,因为它在大多数情况下都非常大。我很感谢您的反馈。还有一件事:您知道我可以看的任何示例模式吗?我对NoSQL/MongoDB一无所知。在这种情况下,您应该问自己的第一个问题是MongoDB是否适合您的需要。NoSQL适用于某些项目,而RDMS(仍然)适用于其他项目。一个很好的起点当然是MongoDB文档(示例非常丰富,有一个关于DB设计的页面),这个论坛以及MongoDB邮件列表是另一个很好的信息来源。最后,对于主要语言,有具有特定功能和文档的专用库。