如何查询mongodb中的文档比较数组中的字段?

时间:2016-06-06 12:23:48

标签: mongodb mongodb-query database nosql

如果我有这个系列:

db.createCollection("misMensajes", {max: 100});

此分发的文件:

    db.misMensajes.insert(
    {
    "FechaEnvío": new Date("2015-06-22"),
    "Texto": "bla",
    "Destinatarios":[
        {
            "Nombre": "Pepa",
            "Edad": 15,
            "Apodo": "P"
        },
        {
            "Nombre": "Juan",
            "Edad": 16,
            "Apodo": "J"
        }
    ]
    }
);

我想要做的是一个查询,以获取有关于" Destinatarios" " EDAD"大于15且小于18。 我不知道如何查询"内部"阵列" Destinatarios"。我是在mongo开始的,我不了解很多东西。我到现在所拥有的是:

db.misMensajes.find({
    $and:[
        {Edad:{$gt:15}},
        {Edad:{$lt:18}}
    ]
});

但这并不能满足我的需要。

3 个答案:

答案 0 :(得分:2)

要在数组内查询,您需要使用dot notation作为字段名称,在这种情况下为Destinatarios.Edad

db.misMensajes.find({
    $and: [
        { 'Destinatarios.Edad': { $gt: 15 } },
        { 'Destinatarios.Edad': { $lt: 18 } }
    ]
})

另请注意,在这种情况下您不需要$and

db.misMensajes.find({
    'Destinatarios.Edad': { $gt: 15, $lt: 18 }
})

对于更复杂的查询,您可能需要使用the $elemMatch operator

答案 1 :(得分:0)

请使用 $ elemMatch 。这是查询。

db.misMensajes.find({Destinatarios:{$ elemMatch:{$ and:[{Edad:{$ gt:15}},{Edad:{$ lt:18}}]}}});

答案 2 :(得分:0)

请参阅find-doc,以便更好地了解如何根据数组字段使用查找查询。

要根据大于和小于(根据您的要求)值进行查找,请使用mongodb的$gt$lt

所以你可以使用如下: -

db.misMensajes.find({
$and: [
    { 'Destinatarios.Edad': { $gt: 15 } },
    { 'Destinatarios.Edad': { $lt: 18 } }
]
}).toArray(function(err, result)
   {
       console.log(results); //results will be an array of objects, containing all the records, which matches the query
    }
  

注意: - 上述查询将返回与条件匹配的父记录。

     

Destinatarios将包含所有对象,而不仅仅是与查询匹配的对象。

如果您想获取Destinatarios数组的特定对象,则必须使用aggregate