Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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按嵌套对象ID查找返回整个文档_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js mongoose按嵌套对象ID查找返回整个文档

Node.js mongoose按嵌套对象ID查找返回整个文档,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,这是我的文档结构: { "_id": "590dc8b17e52f139648b9b94", "parent": [ { "_id": "590dc8b17e52f139648b9b95", "child": [ { "_id": "590dc8b17e52f139648b9b8f" }, { "_id": "590dc8

这是我的文档结构:

{
"_id": "590dc8b17e52f139648b9b94",
"parent": [
    {
        "_id": "590dc8b17e52f139648b9b95",
        "child": [
            {
                "_id": "590dc8b17e52f139648b9b8f"
            },
            {
                "_id": "590dc8b17e52f139648b9b90"
            }
        ]
    },
    {
        "_id": "590dc8c57e52f139648b9b9b",
        "child": [
            {
                "_id": "590dc8c57e52f139648b9b96"
            }
        ]
    }
]}
我试图只返回有关嵌套对象的信息,我正在使用它的_id查找该对象

router.get('/child/:id', (req, res) => {
    Project.findOne({ 'parent.child._id': req.params.id },
            (err, results) => {
                    if (err)
                            res.status(500).send(err);
      res.status(200).json(results.parent[0].child.id(req.params.id));

            }
    )});
问题是,结果包含整个文档,其中可能包含多个父级 所以很明显,我的代码只有在已知的id位于第一个父对象中时才起作用

我怎样才能修好它? 非常感谢

因此,显然,展开和匹配解决方案是好的,但是对于mongoose,您需要明确地说id是ObjectId类型

 {$match:
{ "parent.child._id": new mongoose.Types.ObjectId(id) }
            }

基本上,您可以先在聚合中$unwind父对象,然后与子id匹配。这将确保它只提供父对象,而不是整个文档。此外,如果匹配id不需要位于第一个父对象内,但可以位于父对象数组内的任何位置,则也可以。它将从其子数组中包含搜索id的父数组返回require对象

db.project.aggregate([ 
    { $unwind : '$parent'},
    { $match : 
        { "parent.child._id" : '590dc8b17e52f139648b9b8f' } 
    } 
]);
蒙古语语法:

//mongoose

let Project = mongoose.model('project', yourProjectSchema);

Project.aggregate([ 
    { "$unwind" : '$parent'},
    { "$match" : 
        { "parent.child._id" : req.params.id } 
    } 
]);

尝试使用Thank,我仍在试图理解为什么我会收到一个空数组,在我上面提到的聚合解决方案之后,您是否会收到一个空数组?另外,请确保您将我提到的静态id替换为您的需求参数是的,我尝试使用现有的硬编码id和请求参数中的实际id。此外,我还必须将db.project.aggregate更改为project.aggregate,因为我正在使用mongooseCan。您可以通过尝试上述查询和您的孩子中存在的硬编码id来签入MongoShell。\u id值?我在答案中也添加了mongoose语法。谢谢,我通过添加:new mongoose.Types.ObjectId(id)解决了这个问题