【发布时间】:2011-06-02 11:28:45
【问题描述】:
郑重声明,谈到 Rails 和 MongoDB,我还是个新手。
我正在使用 Rails+Mongoid+MongoDB 构建应用程序,我注意到 Mongoid 出于某种原因将 ObjectID 添加到嵌入式文档中。
有没有办法通过 ObjectID 查询集合中的所有文档,包括主文档和嵌套文档?
如果我运行这个命令
db.programs.findOne( { _id: ObjectId( "4d1a035cfa87b171e9000002" ) } )
我得到这些结果是正常的,因为我在根级别查询 ObjectID。
{
"_id" : ObjectId("4d1a035cfa87b171e9000002"),
"created_at" : "Tue Dec 28 2010 00:00:00 GMT+0000 (GMT)",
"name" : "program",
"routines" : [
{
"name" : "Day 1",
"_id" : ObjectId("4d1a7689fa87b17f50000020")
},
{
"name" : "Day 2",
"_id" : ObjectId("4d1a7695fa87b17f50000022")
},
{
"name" : "Day 3",
"_id" : ObjectId("4d1a76acfa87b17f50000024")
},
{
"name" : "Day 4",
"_id" : ObjectId("4d1a76ecfa87b17f50000026")
},
{
"name" : "Day 5",
"_id" : ObjectId("4d1a7708fa87b17f50000028")
},
{
"name" : "Day 6",
"_id" : ObjectId("4d1a7713fa87b17f5000002a")
},
{
"name" : "Day 7",
"_id" : ObjectId("4d1a7721fa87b17f5000002c")
}
],
"user_id" : ObjectId("4d190cdbfa87b15c2900000a")
}
现在,如果我尝试使用嵌入文档(例程)之一的 ObjectID 进行查询,我会像这样得到 null。
db.programs.findOne( { _id: ObjectId( "4d1a7689fa87b17f50000020" ) } )
null
我知道可以像这样查询嵌入的对象
db.postings.find( { "author.name" : "joe" } );
但是,如果您传递了某种 ObjectID 并希望在该 ObjectID 所在的文档中找到它,这似乎有点多余。
所以我想我的问题是这个......
是否可以通过一些我不熟悉的方法通过 ObjectID 查询并在嵌入文档中搜索 ObjectID?
谢谢。
【问题讨论】:
标签: ruby-on-rails mongodb mongoid