首页 文章

MongoDB / Mongoid:可以在嵌入式文档中查询ObjectID吗?

提问于
浏览
2

为了记录,我在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 回答

  • 2

    您无法像这样全局查询ObjectID . 你必须这样做

    db.programs.find({"routines._id": ObjectId("4d1a7689fa87b17f50000020")})

  • 3

    如果你想获得匹配的子文档,你可以使用$ elemMatch和'$'运算符,如下所示:

    db.programs.find({"_id" : ObjectId("4d1a035cfa87b171e9000002"),
        routines:{$elemMatch:{"_id" : ObjectId("4d1a7689fa87b17f50000020")}}},{"routines.$":1})
    

    它将仅返回匹配的子文档而不是完整的子文档 .

  • 0

    不,你只能按 { "routines._id" : ObjectId("4d1a7689fa87b17f50000020")} 这样的字段搜索

相关问题