【问题标题】:Mongo query to find field within array of objects [duplicate]Mongo查询以查找对象数组中的字段[重复]
【发布时间】:2019-03-08 22:02:18
【问题描述】:

我有一个名为 collectionA 的集合,其中包含一个类型对象数组。

例子:

{
"_id" : ObjectId("123456"),
"tags" : [ 
    {
        "name" : "Bob D",
    }, 
    {
        "name" : "another name",
    }
    ...

如何编写与对象数组中的名称匹配的查询? 我试过db.getCollection('collectionA').find({ "name": "Bob D}),但没用。

【问题讨论】:

  • 您能否从您的收藏和预期输出中添加示例文档?
  • 试试db.getCollection('collectionA').find({ "tags.name": "Bob D" }),因为name嵌套在tags
  • @mickl 我已经尝试了你的命令,除了我要取回整个对象 (objectId(123456)) 而不是标签数组中名称匹配的单个对象

标签: mongodb mongodb-query


【解决方案1】:

要过滤嵌套数组,您可以使用$elemMatch(作为投影):

db.col.find({ "tags.name": "Bob D" }, { tags: { $elemMatch: { name: "Bob D" } } })

返回第一个匹配的数组元素,或者使用$filter获取tags数组的多个匹配元素:

db.col.aggregate([ { $addFields: { tags: { $filter: { input: "$tags", as: "tag", cond: { $eq: [ "$$tag.name", "Bob D" ] } } } } } ])

【讨论】:

  • 非常感谢!两种方法都有效。
  • 实际上,要构建它,为什么需要标签:{ $elemMatch: { name: "Bob D" } 除了 db.col.find({ "tags.name": " Bob D" }?我知道如果我不包含 elemMath,我会返回整个文档,而不仅仅是与名称匹配的对象。
  • find() 的第二个参数表示一个投影,它允许您重塑存储在数据库中的文档
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 1970-01-01
相关资源
最近更新 更多