我正在嘗試使用貓鼬從我的 BSON 檔案中提取 2 種型別的資料。2個資料是;
- 意圖 1 - 我想從 tagNo == 2 的 items 陣列中獲取物件
- 意圖 2 - 我想從 item 陣列中獲取物件,其中 tagNo == 2 和 tagID == kLawOURVpz1IIjoQ2fhCvy7NM。
對于意圖1,我嘗試過;
db.find(
{ "fileID": "0pdn3jdndndj3msms, "items.tagNo": 2 },
{
"items": {
"$elemMatch": { "tagNo": 2 }
}
}
);
我厭倦了下面的查詢意圖2
db.find(
{ "fileID": "0pdn3jdndndj3msms, "items.tagNo": 2 },
{
"items": {
"$elemMatch": { "tagNo": 2, "tagID": "kLawOURVpz1IIjoQ2fhCvy7NM", }
}
}
);
我不斷地取回整個物件。
我的 BSON 檔案是;
{
"_id": "ID_GOES_HERE",
"fileID": "0pdn3jdndndj3msms",
"fileName": "Item List",
"items": [
{
"tagNo": 2,
"status": 0,
"tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
"tagUnit": 5
},
{
"tagNo": 2,
"status": 0,
"tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
"tagUnit": 8
},
{
"tagNo": 2,
"status": 0,
"tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
"tagUnit": 81
},
{
"tagNo": 4,
"status": 0,
"tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
"tagUnit": 904
},
{
"tagNo": 3,
"status": 0,
"tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
"tagUnit": 24
},
{
"tagNo": 2,
"status": 0,
"tagID": "pOawOURVpz1IIjoQ2fhCvy7w3",
"tagUnit": 35
},
{
"tagNo": 1,
"status": 0,
"tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
"tagUnit": 11
},
{
"tagNo": 2,
"status": 0,
"tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
"tagUnit": 30
}
]
}
uj5u.com熱心網友回復:
你需要聚合框架
db.collection.aggregate([
{
$match: { //Match condition to get the matching arrays
"fileID": "0pdn3jdndndj3msms",
"items.tagNo": 2
}
},
{
$project: {
"items": {
$filter: { //Project only matching array elements
input: "$items",
as: "item",
cond: {
$eq: [
"$$item.tagNo",
2
]
}
}
}
}
}
])
操場
db.collection.aggregate([
{
$match: {
"items": {
"$elemMatch": {
"tagNo": 2,
"tagID": "kLawOURVpz1IIjoQ2fhCvy7NM",
}
}
}
},
{
$project: {
"items": {
$filter: {
input: "$items",
as: "item",
cond: {
"$and": [
{
$eq: [
"$$item.tagNo",
2
]
},
{
$eq: [
"$$item.tagID",
"kLawOURVpz1IIjoQ2fhCvy7NM"
]
}
]
}
}
}
}
}
])
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481726.html
標籤:javascript mongodb 猫鼬 nosql 聚合框架
上一篇:參考模式,而不是模型
