请教各位大神,用mongoose如何获取最新插入的一条数据的id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教各位大神,用mongoose如何获取最新插入的一条数据的id相关的知识,希望对你有一定的参考价值。

参考技术A 关键字段必须要非空。 空值有时候是有用的, 比如可以简单判断该值是否为有效值。 但是有时空值会造成错误 , 一个空值数据没有任何类型,执行某些运算或显示时会出错。 所以,根据您的需要和习惯,来决定是否全部设置为非空。 对于有空值的字段

如何使用 mongoose 将文档插入 mongodb 并获取生成的 id?

【中文标题】如何使用 mongoose 将文档插入 mongodb 并获取生成的 id?【英文标题】:How to insert a doc into mongodb using mongoose and get the generated id? 【发布时间】:2012-05-18 05:29:23 【问题描述】:

我正在使用mongoose来操作mongodb。现在,为了测试,我想通过本机连接将一些数据插入到 mongodb 中。

但问题是插入后如何获取生成的id?

我试过了:

var mongoose = require('mongoose');

mongoose.connect('mongo://localhost/shuzu_test');

var conn = mongoose.connection;

var user = 
    a: 'abc'
;

conn.collection('aaa').insert(user);

console.log('User:');
console.log(user);

但它会打印:

 a: 'abc' 

没有_id 字段。

【问题讨论】:

【参考方案1】:

您可以自己生成_id并将其发送到数据库。

var ObjectID = require('mongodb').ObjectID;

var user = 
  a: 'abc',
  _id: new ObjectID()
;

conn.collection('aaa').insert(user);

这是我最喜欢的 MongoDB 功能之一。如果您需要创建多个相互链接的对象,则无需在 app 和 db 之间进行多次往返。您可以在应用程序中生成所有 id,然后插入所有内容。

【讨论】:

new ObjectID() 不是需要往返才能获得“可用”ID吗?...否则,不会有极小的碰撞机会吗? ((例如,在 MSSQL 上,NEWID() 符合 RFC4122 ......并确保没有冲突,但它发生在 DB 端。) 我做了一些进一步的研究,遇到了这个 SOQuestion [***.com/a/5694803/1327508],它解释了 oid 是如何生成的和 3 种(+1 评论)碰撞场景......我的答案是本质上,“不,你是对的”,因为 oid 是如何生成的。 似乎 IObjectID 已被废弃,“无效的架构配置:_id 架构类型定义无效”【参考方案2】:

如果您使用 .save,那么您将在回调函数中取回 _id。

const User = require('../models/user.js');    

var user = new User(
  a: 'abc'
);

user.save(function (err, results) 
  console.log(results._id);
);

【讨论】:

获取用户不是未定义的 我使用User 作为示例模型。您需要从要导出的任何文件中包含模型。 更新了示例用户模型【参考方案3】:

如果你喜欢使用 Promises:

const collection = conn.collection('aaa');
const instance = new collection( a: 'abc' );
instance.save()
    .then(result => 
        console.log(result.id);  // this will be the new created ObjectId
    )
    .catch(...)

或者,如果您使用的是 Node.js >= 7.6.0:

const collection = conn.collection('aaa');
const instance = new collection( a: 'abc' );
try 
    const result = await instance.save();
    console.log(result.id);  // this will be the new created ObjectId
 catch(...)

【讨论】:

【参考方案4】:

您可以使用带有 upsert: true 选项的 Update 方法

aaa.update(
    a : 'abc'
, 
    a : 'abc'
, 
    upsert: true
);

【讨论】:

以上是关于请教各位大神,用mongoose如何获取最新插入的一条数据的id的主要内容,如果未能解决你的问题,请参考以下文章

各位大神请教怎么用ps制作像苹果ipod(ios6)横屏音乐专辑的动画?

单片机控制TFT液晶,液晶驱动为ILI9341,请教各位大神如何实现动画显示且屏幕不闪烁?

请教各位大神tp5怎么进行多表查询

请教各位大神,如何用python提取出两幅图像中不同的部分

各位百度知道的大神,请教个问题,下面跨库查询的SQL语句该怎么写?

请教981213大神及各位大神,关于openwrt编译LED网口灯不亮问题