V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
Aidenboss
V2EX  ›  MongoDB

关于 mongoose 的 findOneAndUpdate 问题。

  •  
  •   Aidenboss · 2019-05-19 23:11:48 +08:00 · 11513 次点击
    这是一个创建于 2025 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,想询问下关于:findOneAndUpdate 的问题。 我这里使用了 mongoose。 我定义了一个 name 字段为唯一索引。导致每次我使用 findOneAndUpdate() 方法的时候,就算没有把 _id 赋值,该方法也会根据 name 查找到数据库已存在的文档。

    代码如下,请各位老师帮忙看下,感谢!

    import * as mongoose from 'mongoose';
    import { Schema } from 'mongoose';
    
    const tableName = 'test';
    
    class StoreEntity {
        _id: Schema.Types.ObjectId;
        name: string;
    }
    
    const StoreSchema: Schema = new Schema({
        name: {
            type: String,
            required: true
        }
    }, {
        autoCreate: true,
        versionKey: false
    });
    
    const StoreOperation = mongoose.model <StoreEntity> (tableName, StoreSchema, tableName);
    
    insertOrUpdate(storeEntity: StoreEntity) {
        const storeEntity = {
            'name': 'test'
        };
        const query = { _id: storeEntity._id };
    
        const update = {
            name: storeEntity.name
        }
        const options = {
            upsert: true,
            new: true
        };
    
        StoreOperation.findOneAndUpdate(query,
            update,
            options,
            (e, writeResult) => {
                if (e) {
                    console.error(`save: ${storeEntity} error`, e);
                    rejected(e);
                } else {
                    resolved(writeResult);
                }
            });
    }
    
    const storeEntity = new StoreEntity();
    storeEntity.name = 'test';
    insertOrUpdate(storeEntity);
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:01 · PVG 01:01 · LAX 09:01 · JFK 12:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.