我有一個ObjectIds,someOtherArray數組,需要將它們與聚合查詢中的當前objectId進行比較。我相信我大部分查詢都完成了,但我不確定如何查看當前的objectId是否在數組someOtherArray中。我在下面的代碼上評論我被卡住的地方。MongoDB聚合查詢:查看數值是否在數組中。
db.Collection.aggregate([
{
$project: {
aField : {
$map : {
input: "$anArray",
as : "arrayValue",
//this is where I'm not sure on what to do. I need something to return
//true or false on whether that item is in someOtherArray
in: { $cond : {if: { $isInArray: [ $$arrayValue, someOtherArray] }, then: arrayValue, else: '' }}
}
}
}
}
]);
有沒有辦法提高$ setIntersection的性能?這個查詢需要很長時間。在此之前,我正在進行一場比賽,然後放鬆並再次比賽,看起來更快,但返回一些錯誤的結果。即:db.Collection.aggregate {「$ match」{{$ unwind:「anArray」},{「$ match」:{「$ match」:{「$ in」:someOtherArray} {「$ in」:someOtherArray} 「anArray」:{「$ in」:someOtherArray} }}, ]) – 2014-09-19 04:44:18
@raging_subs最好的方法是限制管道中的結果,這就是我首先提到過濾的原因。你沒有暴露你在這裏做的一切或你的最終目的是什麼。所以這很難評論。因此,先匹配項目,然後再次匹配篩選結果 – 2014-09-19 04:48:45
當我得到所有匹配的點後,是否有可能上升到一個級別來獲取匹配我的id在setIntersection內的對象的字段?即) db.Collection。集合體([{ 「$項目」:{ 「存在」:{{ 「$ setIntersection」:[ 「$ anArray」,someOtherArray]}} 「someField」: 「$ UpAnObject.field」 }} ]) 請注意,當我說upAnObject的意思是{upAnObject:{field:value,$ anArrayComparison:{fieldToMatchSomeOtherArray:value}}} – 2014-09-19 13:29:13