如何在mongoDB中获取数组的特定元素?

时间:2015-04-17 17:00:46

标签: java mongodb jongo

我想通过responsaveis.$(daniela.morais@sofist.com.br)获取数组的特定元素但是没有结果,我的语法有问题吗?

{
    "_id" : ObjectId("54fa059ce4b01b3e086c83e9"),
    "agencia" : "Abc",
    "instancia" : "dentsuaegis",
    "cliente" : "Samsung",
    "nomeCampanha" : "Serie A",
    "ativa" : true,
    "responsaveis" : [ 
        "daniela.morais@sofist.com.br", 
        "abc@sofist.com.br"
    ],
    "email" : "daniela.morais@sofist.com.br"
    }

语法1

mongoCollection.findAndModify("{'responsaveis.$' : #}", oldUser.get("email"))
                .with("{$set : {'responsaveis.$' : # }}", newUser.get("email"))
                .returnNew().as(BasicDBObject.class);

语法2

db.getCollection('validatag_campanhas').find({"responsaveis.$" : "daniela.morais@sofist.com.br"})

结果

Fetched 0 record(s) in 1ms

2 个答案:

答案 0 :(得分:1)

$位置运算符仅用于更新(...)或项目调用,不能用它来返回数组中的位置。

正确的语法是: -

语法1

mongoCollection.findAndModify("{'responsaveis' : #}", oldUser.get("email"))
                .with("{$set : {'responsaveis.$' : # }}", newUser.get("email"))
                .returnNew().as(BasicDBObject.class);

语法2

db.getCollection('validatag_campanhas').find({"responsaveis" : "daniela.morais@sofist.com.br"})

如果您只想投影特定元素,可以在投影中使用位置运算符$

  

{ “responsaveis $。”:1}

db.getCollection('validatag_campanhas').find({"responsaveis" : "daniela.morais@sofist.com.br"},{"responsaveis.$":1})

答案 1 :(得分:0)

试试这个

db.validatag_campanhas.aggregate(
  { $unwind : "$responsaveis" },
      { 
        $match  : {
         "responsaveis": "daniela.morais@sofist.com.br"
      }
  },
  { $project : { responsaveis: 1, _id:0 }}
);

那将为您提供符合该条件的所有文件

{
    "result" : [
        {
            "responsaveis" : "daniela.morais@sofist.com.br"
        }
    ],
    "ok" : 1
}

如果您想要一个在responsaveis数组中包含元素“daniela.morais@sofist.com.br”的文档,您可以删除项目运算符,如

db.validatag_campanhas.aggregate(
  { $unwind : "$responsaveis" },
      { 
        $match  : {
         "responsaveis": "daniela.morais@sofist.com.br"
      }
  }
);

这会给你

{
    "result" : [
        {
            "_id" : ObjectId("54fa059ce4b01b3e086c83e9"),
            "agencia" : "Abc",
            "instancia" : "dentsuaegis",
            "cliente" : "Samsung",
            "nomeCampanha" : "Serie A",
            "ativa" : true,
            "responsaveis" : "daniela.morais@sofist.com.br",
            "email" : "daniela.morais@sofist.com.br"
        }
    ],
    "ok" : 1
}

希望有所帮助