我有一个餐厅集合,每个文档都包括名称、位置、评论等数据,我正试图将包括两条评论的数据推送到位于布鲁克林的餐厅。该文档当前恰好没有数组字段"0";评论";。根据我所看到的一切,$push函数应该自动将数组添加到文档中,但它没有。这是代码:
db.restaurants.updateOne(
{ borough: 'Brooklyn' },
{
$push: {
reviews: {
$each: [
{
name: 'Frank Zappa',
date: 'January 3, 2019',
rating: 3,
comments: 'This restaurant is not good',
},
{
name: 'Freddie Mercury',
date: 'January 3, 2019',
rating: 5,
comments: 'This restaurant is my favorite',
},
],
},
},
}
);
之后的下一个命令是将相同的评论推送到已经具有数组字段"的另一家餐厅;评论";,并且还切片为2。这两者在代码上的唯一区别是过滤器和切片修饰符。第二种效果很好,第一种则不然。
我是不是误解了推送应该如何工作?在这种情况下,使用推送是一种要求,尽管我也尝试过使用相同的addToSet
https://mongoplayground.net/p/MxH01R4dxjU
您的查询似乎运行良好,请检查您在过滤操作中是否提供了正确的值
事实证明,我没有足够关注有多少文档具有"borough":"布鲁克林";田,而且不止一个。更改为updateMany,问题得到解决。感谢您的时间和关注!