在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邮件列表是另一个很好的信息来源。最后,对于主要语言,有具有特定功能和文档的专用库。