gpt4 book ai didi

ruby-on-rails - MongoDB/Mongoid : Can one query for ObjectID in embedded documents?

转载 作者:可可西里 更新时间:2023-11-01 09:59:52 25 4
gpt4 key购买 nike

郑重声明,对于 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?

谢谢。

最佳答案

您不能像那样在全局范围内查询 ObjectID。你必须做

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

关于ruby-on-rails - MongoDB/Mongoid : Can one query for ObjectID in embedded documents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com