请教各位大神,用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,请教各位大神如何实现动画显示且屏幕不闪烁?