首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试添加/更新文档并使用mongoose递增计数

问尝试添加/更新文档并使用mongoose递增计数
EN

Stack Overflow用户
提问于 2021-07-23 06:21:01
回答 1查看 31关注 0票数 0

我正在尝试创建一个非常简单的mongoDB文档,以便在node.js项目中按日期跟踪搜索。这就是我所追求的:

代码语言:javascript
复制
{
"date": 1626930000000,
"searches": [
            {
             "search": "search 1",
             "count": 2
            },
            {
             "search": "search 2",
             "count": 5
            }
          ]
}

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

代码语言:javascript
复制
const query = { date: date, searches: { search: search } };
        guideSearchesModel.findOneAndUpdate(query, {$addToSet: { searches: search ,$inc: { count: 1 }}}, { upsert: true, new: true }, callback);

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

代码语言:javascript
复制
{
  "_id": {
    "$oid": "60f9eb370f12712140dd29db"
  },
  "date": 1626930000000,
  "searches": {
    "_id": {
      "$oid": "60f9eb38c4ff591f50137726"
    },
    "search": "search 1"
  }

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

任何想法都将不胜感激。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-07-23 16:05:27

查询搜索是一个精确的文档搜索,这意味着它将匹配一个文档,该文档包含一个名为searches的字段,该字段包含一个恰好具有一个名为search的字段的值为“{searches: {search: "search 1"}} 1”的对象。也就是说,它不会与这些样本文档匹配,因此它将始终向上插入。

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

代码语言:javascript
复制
{"searches.search": "search 1"}

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

看起来您希望有条件地更新文档,如果文档不存在,则将搜索附加到数组,如果存在,则递增其计数。这将要求您使用update命令的聚合管道形式,如Update MongoDB field using value of another field。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68492095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档