gpt4 book ai didi

MongoDB。查找元素数组具有所需元素的所有文档

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

我有mongodb文档

{
"_id" : ObjectId("4e8ae86d08101908e1000001"),
"name" : ["Some Name","Another"],
"zipcode" : ["2223"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000002"),
"name" : ["Another", "Name"],
"zipcode" : ["2224"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000003"),
"name" : ["Yet", "Another", "Name"],
"zipcode" : ["2225"]
}

我需要找到“名称数组”具有“另一个”、“名称”值的元素。我尝试使用 $in,但如果有更多值,比如 in

{
"_id" : ObjectId("4e8ae86d08101908e1000003"),
"name" : ["Yet", "Another", "Name"],
"zipcode" : ["2225"]
}

它不返回它 =(

最佳答案

只要您的数据正确并且值包含任何空格,就可以使用 $in(如下所述)。但如果它们不完全相同,您将需要做一些 $regex匹配,也使用 $and形式:

db.collection.find({
$and: [
{name: {$regex: 'Another'} },
{name: {$regex: 'Name'}}
]
})

如果您只想获得一个文档,该文档同时包含并且您想要的字段值,并且以相同的顺序提供参数作为数组:

db.collection.find({ name: ["Another", "Name" ] })

$in的用法是匹配您作为列表提供的任何元素。在这种情况下,您将匹配所有文档

db.collection.find({ name: {$in: [ "Another", "Name" ] } })

对于$all运算符,它的功能是匹配参数列表中包含的所有 元素,因此如果正在搜索的数组中不存在参数,则不会包含该参数。所以只有最后两个会匹配:

db.collection.find({ name: {$all: [ "Another", "Name" ] } })


{
"_id" : ObjectId("4e8ae86d08101908e1000002"),
"name" : ["Another", "Name"],
"zipcode" : ["2224"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000003"),
"name" : ["Yet", "Another", "Name"],
"zipcode" : ["2225"]
}

最后,如果您不知道要匹配的元素的顺序,虽然有点做作,aggregate给你一个出狱的方法:

db.collection.aggregate([
// Match using $all to reduce the list
{$match: {name: {$all: ["Name","Another"] }}},

// Keep the original document in the _id
{$project:{
_id: {
_id: "$_id",
name: "$name",
zipcode: "$zipcode"
},
name: 1
}},

// Unwind the "name" array
{$unwind: "$name"},


// Count up the entries per _id
{$group: { _id: "$_id", count: {$sum: 1}}},

// Only match *2* as there were two elements we were expecting
{$match: {count: 2} },

// Project back to the original form
{$project: {
_id:0,
_id: "$_id._id",
name: "$_id.name",
zipcode: "$_id.zipcode"
}}
])

这就是我能想到的所有形式。

关于MongoDB。查找元素数组具有所需元素的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21922293/

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