我正在尝试创建一个非常简单的mongoDB文档,以便在node.js项目中按日期跟踪搜索。这就是我所追求的:
{
"date": 1626930000000,
"searches": [
{
"search": "search 1",
"count": 2
},
{
"search": "search 2",
"count": 5
}
]
}我想要更新/添加新的搜索到每个日期,并增加现有搜索的计数。然后在新的约会中做同样的事情。这是我目前使用mongoose的尝试:
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"
}它缺少"count",如果我再次运行它,它会插入一个新文档,而不是根据日期更新我想要的文档。
任何想法都将不胜感激。
谢谢!
发布于 2021-07-23 16:05:27
查询搜索是一个精确的文档搜索,这意味着它将匹配一个文档,该文档包含一个名为searches的字段,该字段包含一个恰好具有一个名为search的字段的值为“{searches: {search: "search 1"}} 1”的对象。也就是说,它不会与这些样本文档匹配,因此它将始终向上插入。
要匹配子文档中的字段,请使用点分符号,如
{"searches.search": "search 1"}还要注意,该更新的查询部分同时匹配日期和搜索对象,这意味着如果集合中存在具有所需日期的文档,但其数组中没有包含搜索,则将插入具有该日期的新文档。
看起来您希望有条件地更新文档,如果文档不存在,则将搜索附加到数组,如果存在,则递增其计数。这将要求您使用update命令的聚合管道形式,如Update MongoDB field using value of another field。
https://stackoverflow.com/questions/68492095
复制相似问题