Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
MongoDB-如何通过引用加入父产品和子产品_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB-如何通过引用加入父产品和子产品

MongoDB-如何通过引用加入父产品和子产品,mongodb,mongodb-query,Mongodb,Mongodb Query,我的mongo系列存储产品。有两种产品类型:子产品和父产品。父产品将其子产品的数组作为引用 用例: use mydb; child1 = { _id: 1, name: "Child 1", is_child: true, is_parent: false, children : [] } child2 = { _id: 2, name: "Child 2", is_child: true, is_parent: fal

我的mongo系列存储产品。有两种产品类型:子产品和父产品。父产品将其子产品的数组作为引用

用例:

use mydb;

child1 = {
    _id: 1,
    name: "Child 1",
    is_child: true,
    is_parent: false,
    children : []
}

child2 = {
    _id: 2,
    name: "Child 2",
    is_child: true,
    is_parent: false,
    children : []
}

parent = {
    _id: 3,
    name: "Parent product",
    is_child: false,
    is_parent: true,
    children : [1, 2]
}

db.product.insert( [child1, child2, parent] );
我正在寻找任何返回的查询

{
    _id: 3,
    name: "Parent product",
    is_child: false,
    is_parent: true,
    children: [
        {
            _id: 1,
            name: "Child 1",
            is_child: true,
            is_parent: false,
            children : []
        },
        {
            _id: 2,
            name: "Child 2",
            is_child: true,
            is_parent: false,
            children : []
        }
    ] 
}

我是mongodb的新手,但我想使用map reduce可以解决这个问题。有人能给我建议吗?来自shell的Thx您可以使用如下代码,尽管这不是非常有效的方法。根据子文档的大小和嵌套级别,您应该考虑嵌入而不是链接。

query = {_id: 3}
db.product.find(query).map(function(doc) {
    doc.children = db.product.find({_id: {$in: doc.children}}).toArray();
    return doc;
})

您可以在软件级别使用两个往返来实现这一点。像Mongoose()这样的驱动程序提供了这种开箱即用的功能。所谓的“填充”。有什么方法可以通过查询来完成吗?如果您询问单个
find
findOne
命令,答案是否定的。MongoDB没有连接。现在已经没有“变通办法”可以让连接继续工作。您需要以不同的方式布局模式,或者接受数据将在多个步骤中检索。也许它可以解决我的问题,至少它在shell中返回我想要的结果,但是cursor.map()是否受任何PHP客户端库的支持?我找不到任何其他支持cursor.map()的语言绑定?
map
中没有什么特别之处。它只接受iterable对象,对每个元素应用一些函数,并返回一个修改后的元素数组。您可以在任何客户端中使用循环来模拟这种行为。