正在尝试添加/更新文档并使用mongoose增加计数



我正在尝试制作一个非常简单的mongoDB文档,以在node.js项目中按日期跟踪搜索。以下是我拍摄的目标:

{
"date": 1626930000000,
"searches": [
{
"search": "search 1",
"count": 2
},
{
"search": "search 2",
"count": 5
}
]
}

我想在每个日期更新/添加新的搜索,并增加现有搜索的计数。然后在新的约会中做同样的事情。这是我目前使用猫鼬的尝试:

const query = { date: date, searches: { search: search } };
guideSearchesModel.findOneAndUpdate(query, {$addToSet: { searches: search ,$inc: { count: 1 }}}, { upsert: true, new: true }, callback);

但这就是添加到数据库中的内容:

{
"_id": {
"$oid": "60f9eb370f12712140dd29db"
},
"date": 1626930000000,
"searches": {
"_id": {
"$oid": "60f9eb38c4ff591f50137726"
},
"search": "search 1"
}

它缺少";计数";,如果我再次运行它,它会插入一个新文档,不会根据日期更新我想要的文档。

任何想法都将不胜感激。

谢谢!

查询{searches: {search: "search 1"}}是一个精确的文档搜索,这意味着它将匹配一个包含一个名为searches的字段的文档,该字段包含一个恰好有1个名为"search"的字段的对象,其值为"搜索1";。也就是说,它将与那些样本文档不匹配,因此它将总是追加销售。

要匹配子文档中的字段,请使用点符号,如

{"searches.search": "search 1"}

还要注意,更新的查询部分匹配日期和搜索对象,这意味着如果集合中存在具有所需日期的文档,但其数组中不包含搜索,则将插入具有该日期的新文档。

如果数组不存在,则将搜索附加到数组中,如果存在,则增加其计数,这样看起来您希望有条件地更新文档。这将要求您使用update命令的聚合管道形式,比如使用另一个字段的值更新MongoDB字段。

最新更新