Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database MongoDB-将两个集合嵌入到一个集合中_Database_Mongodb_Mongodb Query_Nosql - Fatal编程技术网

Database MongoDB-将两个集合嵌入到一个集合中

Database MongoDB-将两个集合嵌入到一个集合中,database,mongodb,mongodb-query,nosql,Database,Mongodb,Mongodb Query,Nosql,我有2个集合,我想重新设计数据库,把所有的东西都放在一个集合中。 集合1:汽车和集合2:评论。我想把所有的数据从评论到汽车收集。他们有匹配的id\u产品,所以每辆车都有id\u产品,每一篇评论都有id\u产品 以下是我的想法: var Acursor = db.getCollection('reviews').find({}, {_id:0}); while (Acursor.hasNext()) { var nextDoc = Acurs

我有2个集合,我想重新设计数据库,把所有的东西都放在一个集合中。 集合1:汽车和集合2:评论。我想把所有的数据从评论到汽车收集。他们有匹配的id\u产品,所以每辆车都有id\u产品,每一篇评论都有id\u产品

以下是我的想法:

var Acursor = db.getCollection('reviews').find({}, {_id:0});
              while (Acursor.hasNext()) {
              var nextDoc = Acursor.next();
              var textReview = nextDoc.reviewerID;
              var id_product = nextDoc.id_product;
              db.getCollection('cars').update({id_product:id_product},
              {$set: { textReview:textReview,}},
              {multi:true});
     };

我运行代码时没有任何错误,起初我认为它是有效的,但问题是,如果一辆车有两个评论,只有一个评论被转移到另一个集合。知道如何传输与id_产品配对的所有评论吗?

这是因为
{$set:{textReview:textReview}}
,这里您每次都在更新一个字段,因此如果一辆车有两个评论,然后第一个将写入textReview字段&到了第二次查看的时候,它将覆盖现有值

相反,您可以执行
{$push:{textReview:textReview}}
,因此它将首次创建数组textReview&此后,您的查询将向现有数组追加新元素

Ref:

但是,如果您的MongoDB版本是>=
4.2
,那么我建议在评论集合上编写一个聚合,用于合并两个集合,然后用于将结果写入汽车集合,而不是通过代码执行读写操作