gpt4 book ai didi

ruby-on-rails - MongoDB/Mongoid : search for documents matching first item in array

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

我有一个包含数组的文档:

{
_id: ObjectId("515e10784903724d72000003"),
association_chain: [
{
name: "Product",
id: ObjectId("4e1e2cdd9a86652647000003")
}
],
//...
}

我正在尝试在集合中搜索 association_chain 数组中第一项的 name 与给定值匹配的文档。

我如何使用 Mongoid 执行此操作?或者,如果您只知道如何使用 MongoDB 完成此操作,如果您发布一个示例,那么我可能会弄清楚如何使用 Mongoid 完成此操作。

最佳答案

使用位置运算符。您可以使用 .0 查询数组的第一个元素(以及使用 .1 等查询第二个元素)。

> db.items.insert({association_chain: [{name: 'foo'}, {name: 'bar'}]})
> db.items.find({"association_chain.0.name": "foo"})
{ "_id" : ObjectId("516348865862b60b7b85d962"), "association_chain" : [ { "name" : "foo" }, { "name" : "bar" } ] }

您可以看到位置运算符生效,因为在第二个元素中搜索 foo 没有返回命中...

> db.items.find({"association_chain.1.name": "foo"})
>

...但是搜索 bar 会。

> db.items.find({"association_chain.1.name": "bar"})
{ "_id" : ObjectId("516348865862b60b7b85d962"), "association_chain" : [ { "name" : "foo" }, { "name" : "bar" } ] }

您甚至可以在不索引所有关联链文档的所有名称的情况下索引这个特定字段:

> db.items.ensureIndex({"association_chain.0.name": 1})
> db.items.find({"association_chain.0.name": "foo"}).explain()
{
"cursor" : "BtreeCursor association_chain.0.name_1",
"nscanned" : 1,
...

}
> db.items.find({"association_chain.1.name": "foo"}).explain()
{
"cursor" : "BasicCursor",
"nscanned" : 3,
...
}

关于ruby-on-rails - MongoDB/Mongoid : search for documents matching first item in array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844947/

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