gpt4 book ai didi

javascript - 从查找或插入获取 ID,MongoDB

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:44 27 4
gpt4 key购买 nike

我经常使用下面的这种模式。使用两个 MongoDB 调用来完成这项工作似乎有点笨拙,我想知道是否有更好的方法来做到这一点?我正在查找现有文档的 ID,或者...我想创建一个新文档并使用其 ID。在 Meteor 中,我可以通过一次调用完成此操作吗?

var thing_id;
var existing_doc = Things.findOne({name:'Thing One'});
if (existing_doc) thing_id = existing_doc._id;
else thing_id = Things.insert({name:'Thing One'});
return thing_id;

最佳答案

可以使用findAndModify

有一个包添加了此功能(尽管如果我自己实现它,我的做法可能会有所不同)。

$ meteor add fongandrew:find-and-modify

及其 repository on GitHub .

它将原始方法添加到 Mongo.Collection 的原型(prototype)中并包装 async,以便它可以在服务器上使用 Fiber 运行。

如果传递 true 作为第二个参数,则可以获得原始输出。

这是一个简短的示例,其中包含一次插入和一次更新。

> const Foo = new Mongo.Collection("foo");
> Foo.insert({foo: 1});
'6Mkpdjf3sXDZy6ioQ'
> Foo.findAndModify({query: {foo: 1}, update: {$set: {bar: 1}}, upsert: true}, true )
{ lastErrorObject: { updatedExisting: true, n: 1 },
value: { _id: '6Mkpdjf3sXDZy6ioQ', foo: 1 },
ok: 1 }
> Foo.findAndModify({query: {foo: 2}, update: {$set: {bar: 2}}, upsert: true}, true )
{ lastErrorObject: { updatedExisting: false, n: 1, upserted: 'y4eQzLWqCyBNr2WW9' },
value: null,
ok: 1 }
> Foo.findOne({foo: 2});
{ _id: 'y4eQzLWqCyBNr2WW9', foo: 2, bar: 2 }
>

如果您每次都想获取_id,您可能需要做一些额外的工作来简化它,但这是可行的。

关于javascript - 从查找或插入获取 ID,MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40578831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com