如果 a$in中的輸入與任何不匹配,Mongo 有沒有辦法回傳一些指示(標志、欄位等)docs?
請看我的 Mongo Playgrond
這成功地回傳了所有奇數檔案。
我怎么能有一些跡象表明沒有找到偶數?
我想在 Mongo 本身中做到這一點。我知道我可以遍歷結果JS并執行diff.
Fwiw,我這$in實際上將$match是aggregate. 所以也許我可以使用類似的東西addFields來解決不匹配的問題。
謝謝!
所以我想要的輸出可能是每個否定匹配仍然得到一個回傳的檔案......但是有一個found:false像下面這樣的新屬性。所以..在我的例子中,evens #s 不是發現的,看到類似的東西會很酷..
{
"_id": ObjectId("5a934e000102030405100006"),
"key": 2,
"found": false
},
{
"_id": ObjectId("5a934e000102230405000006"),
"key": 4,
"found": false
},
{
"_id": ObjectId("5a934e000122030405000006"),
"key": 6,
"found": false
}
也許,將found所有正面匹配都設為 true會更清晰。
或者......也許回傳不匹配的子陣列(在后期處理中可能會更清晰)
uj5u.com熱心網友回復:
在 MongoDB 中沒有直接的方法可以做到這一點,您可以嘗試使用聚合查詢來處理自定義需求,
在這里,我添加了一個聚合查詢來滿足您的要求,但我不確定您的確切資料是什么,
輸入:
[
{ "key": 1 },
{ "key": 2 },
{ "key": 3 },
{ "key": 4 },
{ "key": 50 },
{ "key": 6 },
{ "key": 7 }
]
$match你的$in情況$facet將結果和未找到的數字分開result關鍵是要得到你的最終檔案結果notFound是找到未找到的鍵$group通過 null 并使用結果從結果中獲取唯一鍵$addToSet$setDifference要獲得兩個陣列的差異,首先是您的輸入和第二個可用結果數$project顯示必填欄位
db.collection.aggregate([
{
$match: {
key: {
$in: [1, 3, 5, 7]
}
}
},
{
$facet: {
result: [],
notFound: [
{
$group: {
_id: null,
key: { $addToSet: "$key" }
}
},
{
$project: {
key: {
$setDifference: [[1, 3, 5, 7], "$key"]
}
}
}
]
}
}
])
操場
結果:
[
{
"notFound": [
{ "key": [5] }
],
"result": [
{ "key": 1 },
{ "key": 3 },
{ "key": 7 }
]
}
]
第二種方法,根據您的預期結果樣本,
$addFields添加新欄位found$in檢查key提供的陣列中是否有值,如果是,則回傳 true 否則回傳 false
db.collection.aggregate([
{
$addFields: {
found: {
$in: ["$key", [1, 3, 5, 7]]
}
}
}
])
操場
結果:
[
{ "key": 1, "found": true },
{ "key": 2, "found": false },
{ "key": 3, "found": true },
{ "key": 4, "found": false },
{ "key": 50,"found": false },
{ "key": 6, "found": false },
{ "key": 7, "found": true }
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/389739.html
上一篇:mongo查詢不會觸發復合索引
