当前位置: 首页 > 知识库问答 >
问题:

Mongoose查询问题-$push两次推入元素

齐昊焱
2023-03-14
<form action="/addchat" method="post">
            <input type="text" class="form-control" name="chatid" id="addchatid">
            <input type="text" class="form-control" name="chatname">
            <select class="form-control form-control-sm" name="chatbot" id="chatbot">
            <option value="684206793:AAH5uDpus4Ngw1Z60pj6iOedBGCM8Vq0">botname1</option></select><br>
            <button type="submit" class="btn btn-primary">Add</button>
</form>

这是我的应用代码:

app.post('/addchat', async (req, res) => {

    var czat = {
      name: req.body.chatname,
      chatid: req.body.chatid
    }

    await botsmodel.updateOne({
        token: req.body.chatbot
      }, {
        $push: {
          chats: czat
        }
      },
      async (err, result) => {
        if (err) {
          console.log(`Error updating chats ${err}`)
        } else {
          console.log(`Chats updated for ${req.body.chatbot}`);
        }

      });


    await res.redirect('/')


});

这是我的集合架构:

var schemaOptions = {
  timestamps: true,
  toJSON: {
    virtuals: true
  },
  toObject: {
    virtuals: true
  }
};

var botyschema = new mongoose.Schema({
  _id: String,
  name: String,
  token: String,
  chats: Array
}, schemaOptions);

执行之后,我的控制台看起来像是推了一次“czat”对象:

Chats updated for 684206793:AAH5uDpus4Ngw1Z60pj6iOedBGCM8Vq0

但在我的集合中,有两个对象附加到我的数组中,看起来是:

 "chats": [
            {
                "name": "chat_main",
                "chatid": "100516120633"
            },
            {
                "name": "chat_main",
                "chatid": "100516120633"
            }
          ],

我的架构或查询中缺少了什么?

共有1个答案

张鸿宝
2023-03-14

我也遇到过类似的问题,我通过将$push更改为$AddToSet来解决这个问题。

$AddToSet文档

希望能有所帮助。

 类似资料:
  • 我用Mongoose定义了以下模式: 我尝试执行以下查询: 查询不响应,并且从不进入回调函数。这很奇怪,因为这种类型的查询(搜索两个字符串字段)适用于我定义的另一个模式,但不适用于这个模式。另一种模式更简单,不需要任何嵌入文档。 [更新] 我试过你的建议,但不行。我认为只有两个选择: 1.我发布的模式有问题。 多谢!

  • 我有以下数据结构格式: 我已经在里面有以下数据: 我已经阅读了参考资料和文档,在完成以下内容时有点不知所措: > 什么是“哪里”等价物?ie.选择查找具有的的条目 在中没有看到适用的示例https://www.tarantool.io/en/doc/2.2/reference/reference_lua/box_space/#lua-function.space\u object.select 用

  • 问题内容: 我想查询一个mySQL表以提取两次和两次之间的数据。我知道如何使用“ between”调用对单个“ datetime”列执行此操作,但是我的列是一个“ date”列和一个“ time”列。我在网上可以找到的所有解决方案都是针对单个datetime列的。 我的范围从15:30的“ day1”到15:14的day1 + 1day 到目前为止,我可以获得以下范围(有效): 但是我显然需要合并

  • 我有这个问题。我希望它从内容表中选择4个条目,并按如下方式对条目进行排序: > 选择最近的条目。它表示按日期排序(mysql datetime)DESC,id DESC。 从这4个选定项中,按likes(mysql INT)DESC排序 运行查询时,它返回错误的结果。它选择与此条件匹配的条目,其中主题='id'和活动='1'。它按likes DESC对条目进行排序,但忽略了这个条件,即按日期DES

  • 让我们考虑一下这些帖子的集合。每个帖子都有一个评论数组,每个评论都有一个字符串数组,带有键“likes”,表示喜欢该评论的用户。 如何使用mongoose检查用户是否喜欢具有给定ID的评论?

  • 问题内容: 我试图找出如何用Mongoose做特定的查询。我在mongodb中有这样的东西: 我想获取实际日期和modificationDate之间的差异大于5天的所有对象。 问题答案: 计算5天的截止时间,然后使用运算符和计算出的截止值执行: