{ _id: '/players/c/cruzne02.shtml'/span>,
url: '/players/c/cruzne02.shtml',
name: 'Nelson Cruz',
image: 'https://www.baseball-reference.com/req/202108020/images/headshots/f/fea2f131_mlbam.jpg',
teams:
[ { name: 'MIL', 年數: [2005] },
{ name: 'TEX',
years: [ 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013] },
{ name: 'BAL', years: [2014] },
{ name: 'SEA', years: [ 2015, 2016, 2017, 2018] },
{ name: 'MIN', years: [ 2019, 2020, 2021 ] },
{ name: 'TBR', years: [2021 ] } ]
}
如果我想找到這個球員的所有隊友,我如何組織一個查詢,以便從我的節點后端只呼叫一次,而不是在每個團隊中回圈并為每個團隊呼叫一個查找?
而不是在Node的team物件中回圈查看每個物件,并對每個專案進行查詢,如db.collection.find($and: {[{"team.name": "MIL"}, {"team.years":2005]});并回圈查看每個球隊的每一年。因為我需要為每個球隊建立一個陣列。所以在這種情況下,我想呼叫一個查詢并回傳18個陣列,而不是為這個物件呼叫18個查找。
uj5u.com熱心網友回復:
查詢
- 匹配階段
- match階段
- 檢查所有的團隊成員 。
- 一個成員為例
{ name: 'MIN', years: [ 2019, 2020, 2021 ] } - 通過了,因為
MIL<
MIL<=MIN<=TBR- 和
[ 2019, 2020, 2021 ].instersetion(range 2005 2022(exclusive))不是空的。 所以球員今年也在該隊打球 。
- 如果甚至有1個成員通過(過濾器的陣列結果不是空的)=> 球員在該時間范圍內,在球隊范圍內的球隊打球
- 因此,所有回傳的球員在某個球隊中至少有1年是隊友 。
*我不確定我是否得到了你所需要的東西,在使用它之前先測驗一下,如果它能按你需要的方式作業的話
用1名成員進行測驗(這種方式更容易測驗)用1名成員進行測驗
uj5u.com熱心網友回復: 你可以用$elemMatch 它可以找到在他們的
標籤: 上一篇:使Azure門戶上的Web應用程式僅在一周內可用幾個小時 下一篇:控制臺記錄陣列中專案的值
db.collection.aggregate( [
{
"$match"/span>: {
"$expr": {
"$ne": [
{
"$filter": {
"input": "$teams",
"cond": {
"$and": [
{
"$gte": {
"$this.name",
"MIL"。
]
},
{
"$lte": [
"$this.name",
"TBR"。
]
},
{
"$ne": [
{
"$setIntersection": [
"$this.year",
{
"$range": [
2005,
2022.
]
}
]
},
[]
]
}
]
}
}
},
[]
]
}
}
}
])
span class="hljs-keyword">const player = {
_id: '/players/c/cruzne02.shtml'。
url: '/players/c/cruzne02.shtml',
name: 'Nelson Cruz',
image: 'https://www.baseball-reference.com/req/202108020/images/headshots/f/fea2f131_mlbam.jpg',
teams:
[ { name: 'MIL', 年數: [2005] },
{ name: 'TEX',
years: [ 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013] },
{ name: 'BAL', years: [2014] },
{ name: 'SEA', years: [ 2015, 2016, 2017, 2018] },
{ name: 'MIN', years: [ 2019, 2020, 2021 ] },
{ name: 'TBR', years: [2021 ] } ]
}; //the player which you search for teammatescollection.find({
"team": {
$elemMatch: {
$or: player.teams. map(span class="hljs-params">t => {name: t。 name, years: {$in: t.years}}.
}
}
})
隊中至少有一個有相同名字的球員,并且在球員的相同組名和年份中存在一個延續的年份。
請看例子這里
