我想創建一個聚合步驟來匹配檔案中的欄位值存在于同一檔案中的陣列中的檔案。
在一個非常有效的示例中(注意這是非常簡化的;這將適合更大的現有管道),給定檔案:
{
"_id":{"$oid":"61a9085af9733d0274c41990"},
"myArray":[
{"$oid":"61a9085af9733d0274c41991"},
{"$oid":"61a9085af9733d0274c41992"},
{"$oid":"61a9085af9733d0274c41993"}
],
"myField":{"$oid":"61a9085af9733d0274c41991"} // < In 'myArray' collection
}
和
{
"_id":{"$oid":"61a9085af9733d0274c41990"},
"myArray":[
{"$oid":"61a9085af9733d0274c41991"},
{"$oid":"61a9085af9733d0274c41992"},
{"$oid":"61a9085af9733d0274c41993"}
],
"myField":{"$oid":"61a9085af9733d0274c41994"} // < Not in 'myArray' collection
}
我想匹配第一個,因為myField集合中存在的值,而不是第二個檔案。
感覺這應該是一個非常簡單的$elemMatch操作$eq符操作,但我不能讓它作業,我發現的每個例子都使用文字。我目前所擁有的如下,我已經嘗試在 myField 周圍使用引號和美元符號的各種組合。
[{
$match: {
myArray: {
$elemMatch: {
$eq: '$this.myField'
}
}
}
}]
我是不是在做一些非常明顯的錯誤?不能在同一個檔案中使用欄位的值$eq嗎?
希望有人能指出我的愚蠢之處:)
謝謝
uj5u.com熱心網友回復:
您可以簡單地$in在聚合管道中執行 a 。
db.collection.aggregate([
{
"$match": {
$expr: {
"$in": [
"$myField",
"$myArray"
]
}
}
}
])
這是Mongo 游樂場供您參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/372922.html
上一篇:如何從嵌套物件中獲取模型資料
