Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongoose查询子文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongoose查询子文档

Node.js Mongoose查询子文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,您好,我正在MongoDB上查询一些嵌套文档。我在用猫鼬。。我的文件就像 [ { "_id": "5a2ca2227c42ad67682731d4", "description": "some descrition", "photos": [ { "_id": "5a2ca22b7c42ad67682731d5", "approved": false, "text":"good"

您好,我正在MongoDB上查询一些嵌套文档。我在用猫鼬。。我的文件就像

[
{
    "_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]}]的结果?次要编辑:要聚合的参数应该是数组(管道):