gpt4 book ai didi

regex - 展开对象数组 mongoDB

转载 作者:行者123 更新时间:2023-12-03 23:27:12 25 4
gpt4 key购买 nike

我的收藏包含以下两个文件

{
"BornYear": 2000,
"Type": "Zebra",
"Owners": [
{
"Name": "James Bond",
"Phone": "007"
}
]
}

{
"BornYear": 2012,
"Type": "Dog",
"Owners": [
{
"Name": "James Brown",
"Phone": "123"
},
{
"Name": "Sarah Frater",
"Phone": "345"
}
]
}

我想找到所有有主人叫詹姆斯的动物。
我尝试展开 Owners 数组,但无法访问 Name 变量。

最佳答案

这里有点用词不当。要在“集合”中找到“对象”或项目,那么您真正需要做的就是匹配“对象/项目”

db.collection.find({
"Owners.Name": /^James/
})

哪个有效,但当然不会将结果限制为“詹姆斯”的“第一次”匹配,这将是:

db.collection.find(
{ "Owners.Name": /^James/ },
{ "Owners.$": 1 }
)

作为基本投影。但这只是一个“单一”匹配,这意味着您需要 .aggregate() 方法,而不是像这样:

db.collection.aggregate([
// Match the document
{ "$match": {
"Owners.Name": /^James/
}},

// Flatten or de-normalize the array
{ "$unwind": "Owners" },


// Filter th content
{ "$match": {
"Owners.Name": /^James/
}},

// Maybe group it back
{ "$group": {
"_id": "$_id",
"BornYear": { "$first": "$BornYear" },
"Type": { "$first": "$Type" },
"Ownners": { "$push": "$Owners" }
}}
])

这允许在过滤时在子文档数组中进行多个匹配。

另一点是正则表达式上的“ anchor ”或“^”插入符号。您确实需要它,以便在可以正确使用索引的字符串的“开始”处进行匹配。开放式正则表达式操作不能使用索引。

关于regex - 展开对象数组 mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27691562/

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