Mongoose,检查对象数组中是否存在值

时间:2016-12-31 01:19:15

标签: javascript arrays node.js mongodb

我有一个集合:我想使用 $in 运算符

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

到目前为止我用这个:

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

但是我已经知道了这个缺陷:如果成员数组像Members: [id1, id2, ... id3]那样,该方法就可以了。但它是一组对象。那我该如何解决呢?

3 个答案:

答案 0 :(得分:6)

$elemMatch可与Arrays of Embedded Documents一起使用:

在您的情况下,您可以尝试:

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

但是因为它是Single Query Condition

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

会做的伎俩。

答案 1 :(得分:1)

您可以通过以下方式使用元素匹配:

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

可以通过以下方式在猫鼬中完成同样的操作:

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

答案 2 :(得分:0)

您可以在查询中使用members.id字段来匹配您的子文档id

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