Mongodb

MongoDB:是否可以搜尋數組大小不匹配的兩個欄位?

  • May 6, 2020

我有一個看起來像下面這樣的集合(我已經簡化了很多)。我需要查詢沒有與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是聚合運算符。

引用自:https://dba.stackexchange.com/questions/266521