簡體   English   中英

Mongoose,檢查對象數組中是否存在值

[英]Mongoose, check if value exists in an array of objects

我有一個集合:我想使用$in運算符

Person = {
 name: String,
 members: [ {id: String, email: String}... {}]
}

到目前為止我用這個:

Person.find({members: {"$in": [id1]}}) 

但我已經知道這個缺陷:如果成員數組類似於Members: [id1, id2, ... id3] ,那么該方法就可以工作。 但它是一個對象數組。 那么我該如何解決呢?

$elemMatch可用於嵌入文檔數組

在您的情況下,您可以嘗試:

Person.find({ 
   members: { 
      $elemMatch: { id: id1 } 
   }
}); 

但由於它是單個查詢條件

Person.find({ 
   "members.id": id1
}); 

會做的伎倆。

您可以通過以下方式使用 elem 匹配:

db.collection.find({
  arrayfield: {
    $elemMatch: {
      id: ObjectId("5eaaeedd00101108e1123461")
    }
  }
})

可以通過以下方式在 mongoose 中完成相同的操作:

query.elemMatch('arrayfield', { id: ObjectId("5eaaeedd00101108e1123461") })

.

query.where('arrayfield').elemMatch({ id: ObjectId("5eaaeedd00101108e1123461") })

.

query.elemMatch('arrayfield', function (elem) {
  elem.where('id').equals(ObjectId("5eaaeedd00101108e1123461"));
})

.

query.where('arrayfield').elemMatch(function (elem) {
  elem.where({ id: ObjectId("5eaaeedd00101108e1123461") });
})

我使用了這個示例集合:

[
  {
    "_id": ObjectId("5eaaeedd00101108e1123451"),
    "arrayfield": [
      {
        id: ObjectId("5eaaeedd00101108e1123461"),
        name: "David"
      },
      {
        id: ObjectId("5eaaeedd00101108e1123462"),
        name: "Brown"
      }
    ]
  },
  {
    "_id": ObjectId("5eaaeedd00101108e1123452"),
    "arrayfield": [
      {
        id: ObjectId("5eaaeedd00101108e1123471"),
        name: "Maple"
      },
      {
        id: ObjectId("5eaaeedd00101108e1123472"),
        name: "Green"
      }
    ]
  },
  {
    "_id": ObjectId("5eaaeedd00101108e1123453"),
    "arrayfield": [
      {
        id: ObjectId("5eaaeedd00101108e1123461"),
        name: "David"
      },
      {
        id: ObjectId("5eaaeedd00101108e1123482"),
        name: "Lacey"
      }
    ]
  }
]

想嘗試直播? 使用此鏈接在 mongo 游樂場上嘗試https://mongoplayground.net/p/H3fdmp9HkQv

您可以在查詢中使用members.id作為字段來匹配您的子文檔id s :

Person.find({ "members.id": { "$in": ["id1"] } })

您可以使用 MongoDB $elemMatch 運算符來匹配嵌套數組包含至少一個與指定條件匹配的元素的文檔。 在您的情況下,您可以使用它來查找成員數組包含具有指定 ID 的 object 的文檔。 這是一個例子:

 Person.find({ "members": { "$elemMatch": { "id": id1 } } });

這將返回成員數組包含 object 且 id 等於 id1 的所有文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM