如何查询Mongodb的嵌入式数组

时间:2016-06-24 06:10:26

标签: mongodb mongoose

我有一个类似的mongodb结构。

  

地点模型的结构

{.....
  amenities: [
    {
      name: "wifi",
      is_free: true
    },
    {
      name: "projector",
      is_free: false,
      price: "50"
    },
    ...........
    ...........
    ...........
  ]
.....}

我想查询一下,我想搜索一个地方,这个地方有一些设施,而不管price & is_free字段。我如何在mongodb / mongoose查询中执行此操作。

  

我想要一些有wifi和等设施的地方列表   投影仪作为输出。

3 个答案:

答案 0 :(得分:4)

db.places.find({$and: [{'amenities.name': 'wifi'}, {'amenities.name':'projector'}])

它会找到在数组['wifi', 'projector']中指定所有amneties的地方。

希望它有所帮助。

答案 1 :(得分:1)

请尝试以下查询name的一个选项:

db.places.find({amenities: {$exists: true}, 'amenities.name':'wifi'})

如果要检查name的多个选项,也可以尝试此查询: -

var findQuery = {amenities: {$exists: true}, 'amenities.name':'wifi' , 'amenities.name':'projector'}

db.places.find(findQuery);

希望这会对你有所帮助。

答案 2 :(得分:0)

请尝试执行以下查询

db.places.find({
    amenities : {
        $exist : true
    },
    amenities : {
        $elemMatch : {
            name : {
                $in : ['wifi', 'projector']
            }
        }
    }
})

在上面提到的查询$exists运算符将检查文档中是否存在设施字段,$elemMatch运算符将匹配包含名称字段的设施数组以及以下值

(1)wifi

(2)投影仪