Mongodb
MongoDB:是否可以搜尋數組大小不匹配的兩個欄位?
我有一個看起來像下面這樣的集合(我已經簡化了很多)。我需要查詢沒有與customersInvited 相同數量的customersAccepted 條目的任何記錄。
/* 1 */ { "_id" : ObjectId("5d7b8ab0f1e55a2e4b6ccfa2"), "title" : "Service AT19", "customersInvited" : [ 429409, 429410, 900 ], "customersAccepted" : [ 429409, 429410, 900 ], "groupId" : null, "deleted" : true, "deletedDate" : ISODate("2019-10-12T05:59:08.135Z"), }
$size 運算符可以做到這一點嗎?在尋找固定數字時我很熟悉它,所以我的計劃 B 將添加兩個單獨的欄位,分別稱為 numAccepted 和 numInvited,然後在修改記錄時更新它並執行以下操作:
db.collection.find( { "numInvited": { $ne: "numAccepted" } } );
如果可以直接比較數組大小,我真的寧願不維護我不需要的其他欄位。您對此提供的任何建議將不勝感激。
$size 運算符可以做到這一點嗎?…所以我的計劃 B 將添加兩個單獨的欄位,稱為 numAccepted 和 numInvited …
$size運算符匹配具有參數指定的元素數量的任何數組。在這種情況下,您必須比較同一文件中兩個數組欄位的大小。您不能為此目的使用 MongoDB 查詢語言 (MQL) 運算符。
聚合
$size
數組運算符返回數組的長度。要在查詢中使用聚合運算符find
,您必須使用$expr運算符。這是如何完成的:db.collection.find( { $expr: { $ne: [ { $size: "$customersInvited" }, { $size: "$customersAccepted" } ] } } )
請注意,上述查詢中使用的$size和$ne是聚合運算符。