如果我有这个系列:
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}}
]
});
但这并不能满足我的需要。
答案 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。