为了记录,我在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?
谢谢 .
3 回答
您无法像这样全局查询ObjectID . 你必须这样做
db.programs.find({"routines._id": ObjectId("4d1a7689fa87b17f50000020")})
如果你想获得匹配的子文档,你可以使用$ elemMatch和'$'运算符,如下所示:
它将仅返回匹配的子文档而不是完整的子文档 .
不,你只能按
{ "routines._id" : ObjectId("4d1a7689fa87b17f50000020")}
这样的字段搜索