Node.js Mongoose查询子文档
您好,我正在MongoDB上查询一些嵌套文档。我在用猫鼬。。我的文件就像Node.js Mongoose查询子文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,您好,我正在MongoDB上查询一些嵌套文档。我在用猫鼬。。我的文件就像 [ { "_id": "5a2ca2227c42ad67682731d4", "description": "some descrition", "photos": [ { "_id": "5a2ca22b7c42ad67682731d5", "approved": false, "text":"good"
[
{
"_id": "5a2ca2227c42ad67682731d4",
"description": "some descrition",
"photos": [
{
"_id": "5a2ca22b7c42ad67682731d5",
"approved": false,
"text":"good"
},
{
"_id": "5a2ca72b0a1aa173aaae07da",
"approved": true,
"text":"bad"
},
{
"_id": "5a2cabf85a41077a2f87d4e3",
"approved": false,
"text":"bad"
}
]
}
]
我只想查找值为“good”的照片,在文本属性,以下是我的查找代码:
ObjectSchema.find({
'photos': {
$elemMatch : {
'text' : 'good'
}
}
},function(err,result){
console.log(result);
});
我只想返回objct,返回值与我的查询匹配的元素,但当此列表中的一个对象匹配时,整个照片列表都会显示结果,而不仅仅是与文本匹配的人。。
我如何查询它,并只带来匹配的元素,在本例中,只带来文本中具有“good”的元素
我在使用nodejs+mongoose
谢谢大家! 您使用的是只带条件的
find
,它将返回整个文档。您还可以选择从文档中包括/排除某些字段。您可以在投影中使用$elemMatch,如下所示:
ObjectSchema.find({
'photos': {
$elemMatch : {
'text' : 'good'
}
}
}, {
'photos': {
$elemMatch : {
'text' : 'good'
}
}
}, function(err,result){
console.log(result);
});
但要当心。根据示例文档,这可能不是您想要的。相反,您可以使用。您可以从以下内容开始(未经测试),并根据自己的喜好塑造输出:
ObjectSchema.aggregate(
{$unwind: "$photos"},
{$match: {"photos.text": "good"}},
function(err,result){
console.log(result);
}
)
其中,$unwind
为数组的每个元素生成单独的文档
要按照您在注释中的描述塑造输出,您需要使用。尝试将类似于以下内容的a$组聚合添加到管道末尾:
{$group: {_id: "$_id", photos: {$push: "$photos"}}}
可能重复的工作!但每次匹配,返回一个文档。。是否可以生成类似[{u id 1,photos[all matches]},{{u id 2,photos[all matches]}]的结果?次要编辑:要聚合的参数应该是数组(管道):