我有以下代码:
var roomDoc = Rooms.findAndModify({
query: {name: roomName},
update: {$setOnInsert: {unixTimestamp: unixTimestampSeconds()}},
new: true,
upsert: true
});
在收到.findAndModify is undefined
错误后,我意识到,Meteor并没有实现.findAndModify
。
是否有通过使用不同查询实现类似功能的Meteor方式?
答案 0 :(得分:4)
然而,上面的答案解释了这种特殊情况,在许多其他情况下,假设findAndModify
是一个原子操作,可用于生成唯一ID:
http://docs.mongodb.org/v3.0/tutorial/create-an-auto-incrementing-field/
似乎Meteor不会实现findAndModify
的包装,因为相应的票证已经关闭,但是社区提出了几个已经在服务器和客户端都可以使用的解决方案:
答案 1 :(得分:2)
您可以直接执行此操作,语法略有不同。
var roomDoc = Rooms.rawCollection().findAndModify(
{ name: name },
[],
{ $setOnInsert: {unixTimestamp: unixTimestampSeconds()} },
{ new: true, upsert: true }
)
更多信息:
https://forums.meteor.com/t/automatically-increment-order-numbers/11261/12
答案 2 :(得分:0)
单独执行find()
和upsert()
并不是明显的事情。
Rooms.upsert({name: roomName}, {$setOnInsert: {unixTimestamp: unixTimestampSeconds()}};
var roomDoc = Rooms.findOne({name: roomName});
这可能会因为两次db调用而效率稍低,但如果困扰你,只需使用Rooms.rawCollection()为Mongo的findAndModify()
编写自己的流星包装器。