Node.js 如何使用mongoose将特定文档从一个集合转移到另一个集合?

Node.js 如何使用mongoose将特定文档从一个集合转移到另一个集合?,node.js,mongodb,mongoose,mongoose-schema,Node.js,Mongodb,Mongoose,Mongoose Schema,我有两个模型-终身会员和年度会员。我想将特定文档从年度成员转移到终身成员。因此,我使用findById从AnnualMembers查询文档,然后将其保存到LifeMembers。但我在试图将其保存给LifeMembers时,不断收到DocumentNotFoundError。请帮忙 代码如下: AnnualMembers.findById(id).then(member=>{         let life = new LifeMembers(member);         life.

我有两个模型-终身会员和年度会员。我想将特定文档从年度成员转移到终身成员。因此,我使用findById从AnnualMembers查询文档,然后将其保存到LifeMembers。但我在试图将其保存给LifeMembers时,不断收到
DocumentNotFoundError
。请帮忙

代码如下:

AnnualMembers.findById(id).then(member=>{
        let life = new LifeMembers(member);
        life.save().then(member=>res.json(member));
                   .catch(err=>console.log(err));
     }).catch(err=>console.log(err));
下面是我不断得到的错误:

{ DocumentNotFoundError: No document found for query "{ _id: 5dc194b3fd0be643f45c4edb }" on model "LifeMember"
    at new DocumentNotFoundError (E:\Projects\orsi\node_modules\mongoose\lib\error\notFound.js:34:11)
    at $__handleSave (E:\Projects\orsi\node_modules\mongoose\lib\model.js:371:17)
    at E:\Projects\orsi\node_modules\mongoose\lib\model.js:303:9
    at result (E:\Projects\orsi\node_modules\mongodb\lib\operations\execute_operation.js:75:17)
    at session.endSession (E:\Projects\orsi\node_modules\mongodb\lib\operations\execute_operation.js:64:11)
    at ClientSession.endSession (E:\Projects\orsi\node_modules\mongodb\lib\core\sessions.js:135:41)
    at executeCallback (E:\Projects\orsi\node_modules\mongodb\lib\operations\execute_operation.js:59:17)
    at updateCallback (E:\Projects\orsi\node_modules\mongodb\lib\operations\update_one.js:41:3)
    at updateDocuments (E:\Projects\orsi\node_modules\mongodb\lib\operations\update_one.js:24:64)
    at handleCallback (E:\Projects\orsi\node_modules\mongodb\lib\utils.js:129:55)
    at coll.s.topology.update (E:\Projects\orsi\node_modules\mongodb\lib\operations\common_functions.js:375:5)
    at handler (E:\Projects\orsi\node_modules\mongodb\lib\core\sdam\topology.js:1000:24)
    at wireProtocol.(anonymous function) (E:\Projects\orsi\node_modules\mongodb\lib\core\sdam\server.js:457:5)
    at E:\Projects\orsi\node_modules\mongodb\lib\core\connection\pool.js:408:18
    at process._tickCallback (internal/process/next_tick.js:61:11)
  message:
   'No document found for query "{ _id: 5dc194b3fd0be643f45c4edb }" on model "LifeMember"',
  name: 'DocumentNotFoundError',
  result:
   CommandResult {
     result:
      { n: 0,
        nModified: 0,
        opTime: [Object],
        electionId: 7fffffff0000000000000004,
        ok: 1,
        operationTime: [Timestamp],
        '$clusterTime': [Object] },
     connection:
      Connection {
        domain: null,
        _events: [Object],
        _eventsCount: 5,
        _maxListeners: undefined,
        id: 1,
        options: [Object],
        logger: [Logger],
        bson: BSON {},
        tag: undefined,
        maxBsonMessageSize: 67108864,
        port: 27017,
        host: 'cluster0-shard-00-01-pcn5n.gcp.mongodb.net',
        socketTimeout: 360000,
        keepAlive: true,
        keepAliveInitialDelay: 300000,
        connectionTimeout: 30000,
        responseOptions: [Object],
        flushing: false,
        queue: [],
        writeStream: null,
        destroyed: false,
        hashedName: '2d8e7dfad852d7e83e92f54b67929766ab731839',
        workItems: [],
        socket: [TLSSocket],
        buffer: null,
        sizeOfMessage: 0,
        bytesRead: 0,
        stubBuffer: null,
        ismaster: [Object],
        lastIsMasterMS: 801 },
     message:
      BinMsg {
        parsed: true,
        raw:
         <Buffer f5 00 00 00 52 ed 45 01 0b 00 00 00 dd 07 00 00 00 00 00 00 00 e0 00 00 00 10 6e 00 00 00 00 00 10 6e 4d 6f 64 69 66 69 65 64 00 00 00 00 00 03 6f 70 ... >,
        data:
         <Buffer 00 00 00 00 00 e0 00 00 00 10 6e 00 00 00 00 00 10 6e 4d 6f 64 69 66 69 65 64 00 00 00 00 00 03 6f 70 54 69 6d 65 00 1c 00 00 00 11 74 73 00 01 00 00 ... >,
        bson: BSON {},
        opts: [Object],
        length: 245,
        requestId: 21359954,
        responseTo: 11,
        opCode: 2013,
        fromCompressed: undefined,
        responseFlags: 0,
        checksumPresent: false,
        moreToCome: false,
        exhaustAllowed: false,
        promoteLongs: true,
        promoteValues: true,
        promoteBuffers: false,
        documents: [Array],
        index: 229,
        hashedName: '2d8e7dfad852d7e83e92f54b67929766ab731839' },
     modifiedCount: 0,
     upsertedId: null,
     upsertedCount: 0,
     matchedCount: 0,
     '$where': { _id: 5dc194b3fd0be643f45c4edb } },
  numAffected: 0,
  filter: { _id: 5dc194b3fd0be643f45c4edb },
  query: { _id: 5dc194b3fd0be643f45c4edb } }
{DocumentNotFoundError:未找到模型“LifeMember”上查询“{u id:5dc194b3fd0be643f45c4edb}”的文档
在新文档NotFoundError(E:\Projects\orsi\node\u modules\mongoose\lib\error\notFound.js:34:11)
位于$handleSave(E:\Projects\orsi\node\u modules\mongoose\lib\model.js:371:17)
位于E:\Projects\orsi\node\u modules\mongoose\lib\model.js:303:9
结果(E:\Projects\orsi\node\u modules\mongodb\lib\operations\execute\u operation.js:75:17)
在session.endSession(E:\Projects\orsi\node\u modules\mongodb\lib\operations\execute\u operation.js:64:11)
在ClientSession.endSession(E:\Projects\orsi\node\u modules\mongodb\lib\core\sessions.js:135:41)
在executeCallback(E:\Projects\orsi\node\u modules\mongodb\lib\operations\execute\u operation.js:59:17)
在updateCallback(E:\Projects\orsi\node\u modules\mongodb\lib\operations\update\u one.js:41:3)
在更新的文档中(E:\Projects\orsi\node\u modules\mongodb\lib\operations\update\u one.js:24:64)
在handleCallback(E:\Projects\orsi\node\u modules\mongodb\lib\utils.js:129:55)
在coll.s.topology.update(E:\Projects\orsi\node\u modules\mongodb\lib\operations\common\u functions.js:375:5)
at处理程序(E:\Projects\orsi\node\u modules\mongodb\lib\core\sdam\topology.js:1000:24)
at wireProtocol.(匿名函数)(E:\Projects\orsi\node\u modules\mongodb\lib\core\sdam\server.js:457:5)
位于E:\Projects\orsi\node\u modules\mongodb\lib\core\connection\pool.js:408:18
在进程中。_tick回调(内部/process/next_tick.js:61:11)
信息:
'在模型“LifeMember”上未找到查询“{u id:5dc194b3fd0be643f45c4edb}”的文档',
名称:“DocumentNotFoundError”,
结果:
命令结果{
结果:
{n:0,
n已修改:0,
opTime:[对象],
选举ID:7FFFFF0000000000000004,
好:1,,
操作时间:[时间戳],
“$clusterTime”:[Object]},
连接:
联系{
域:空,
_事件:[对象],
_活动日期:5,,
_maxListeners:未定义,
id:1,
选项:[对象],
记录器:[记录器],
bson:bson{},
标签:未定义,
maxBsonMessageSize:67108864,
港口:27017,
主机:“cluster0-shard-00-01-pcn5n.gcp.mongodb.net”,
socketTimeout:360000,
基帕利夫:是的,
保持初始延迟:300000,
连接超时:30000,
responseOptions:[对象],
法拉盛:错,
队列:[],
writeStream:null,
销毁:错误,
hashedName:'2d8e7dfad852d7e83e92f54b67929766ab731839',
工作项:[],
套接字:[TLSSocket],
缓冲区:空,
sizeOfMessage:0,
字节:0,
stubBuffer:null,
伊斯马斯特:[对象],
最近一次地震:801},
信息:
BinMsg{
解析:对,
原始:
,
数据:
,
bson:bson{},
选项:[对象],
长度:245,
请求ID:21359954,
答复:11,
操作码:2013年,
fromCompressed:未定义,
响应间隔:0,
检查当前:错误,
莫雷托科姆:错,
允许排气量:false,
promoteLongs:没错,
推广价值观:正确,
促销员:错,
文档:[数组],
索引:229,
hashedName:'2d8e7dfad852d7e83e92f54b67929766ab731839'},
已修改的帐户:0,
upsertedId:null,
upsertedCount:0,
匹配计数:0,
“$where”:{u id:5dc194b3fd0be643f45c4edb},
numAffected:0,
筛选器:{u id:5dc194b3fd0be643f45c4edb},
查询:{u id:5dc194b3fd0be643f45c4edb}

问题已解决。使用findById()进行查询时使用了lean()方法,如下所示:
AnnualMembers.findById(id).lean().then(member=>{/*…*/})
未找到用于查询的文档“{u id:5dc194b3fd0be643f45c4edb}
-似乎您的
id
实际上是JSON中的字符串表示,而不是预期的5dc194b3fd0be643f45c4edb值“。但在此之前,我一直在使用相同的表示法执行其他查询,没有出现错误。如果是这种情况,您能否在尝试查找相关ID时记录响应?请澄清。这里的核心问题是Mongoose文档中的
\uv
键。当使用
.save()
并通过
\u id
找到数据,但
\u v
不匹配时,会产生问题标题中的错误。使用
.lean()
将删除“mongoose文档特定”信息,如
\uu v
,并避免该问题。这同样是由于获取整个对象(带有附加属性)并试图将其保存在另一个集合中而导致的。