【问题标题】:CoreMongooseArray to Normal ArrayCoreMongooseArray 到普通数组
【发布时间】:2019-11-02 04:31:21
【问题描述】:

我正在从一个架构中筛选出 2 个元素,并希望在另一个架构中进行更新。为此,我使用 slice 方法从数组中筛选出前 2 个元素。但我得到了

CoreMongooseArray ['element1','element2']

而不是 ["element1", "element2"]

如何删除“CoreMongooseArray”?

connection.connectedusers.find({},  async (err, docs) => {
if(err) throw err;
var users = docs[0].connectArray;
if (docs[0] != null && users.length >= 2) {
 var shortListed = users.slice(0, 2);
 try {
                await connection.chatschema.updateMany({}, { $push: { usersConnected: [shortListed] } }, { upsert: true });
            } catch (err) {
                res.status(201).json(err);
            }
}

【问题讨论】:

    标签: node.js mongodb mongoose mean-stack mean


    【解决方案1】:

    您需要在查询中添加lean()

    来自docs

    启用了精简选项的查询返回的文档是纯 JavaScript 对象,而不是 Mongoose 文档。它们没有保存方法、getter/setter、virtuals 或其他 Mongoose 功能。

    【讨论】:

      【解决方案2】:

      如果你已经有了 mongoose 数组并且想转换成简单的 js 数组

      const jsArray = mongooseArray.toObject();
      

      https://mongoosejs.com/docs/api/array.html#mongoosearray_MongooseArray-toObject

      【讨论】:

        【解决方案3】:

        由于某种原因,.toObject() 对我不起作用。 lean() 选项有效,但当您已经有一个包含猫鼬数组的对象时,它不适合。因此,如果您已经有 mongoose 数组并且只想将其转换为纯 js 数组,则可以使用以下代码:

        function mongooseArrayToArray(mongooseArray) {
          const array = [];
          for (let i = 0; i < mongooseArray.length; i += 1) {
            array.push(mongooseArray[0]);
          }
          return array;
        };
        

        用法:

        const array = mongooseArrayToArray(mongooseArray);
        

        【讨论】:

          【解决方案4】:

          如果您只想将 CoreMongooseArray 转换为普通数组而不更改其他任何内容:

          const jsArray = [...mongooseArray];
          

          【讨论】:

            猜你喜欢
            • 2019-09-02
            • 1970-01-01
            • 2012-03-18
            • 1970-01-01
            • 2015-06-08
            • 2012-04-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多