Sails.js和本机mongodb查询
我尝试在SailsJS(v0.10)中执行以下操作: 因此,本质上我所做的是将文档从“开发”集合复制到“已发布”集合中,并保留“\u id”。具有相同的“\u id”非常重要,因为它允许更简单的未来操作,我可以将“开发”文档和“发布”文档视为一个文档(因此,“删除”调用只需要向其传递一个“\u id”值) 无论我做什么,我似乎都无法让它发挥作用。我曾尝试使用“native()”和“require('mongodb').ObjectID”,但“published”集合中的“\u id”总是重新生成的-因此,如果我多次运行查询,则“published”集合中的文档会有多个副本。每个都具有不同的“\u id”和不同的“版本”值。这不是很有帮助。为了以防万一,我甚至在我的“已发布”模型中将“autoPK”设置为false 最后,我在文档中添加了一个值--“developmentId”-以存储原始的“development.\u id”,并将其用作目前的解决方法:Sails.js和本机mongodb查询,sails.js,sails-mongo,Sails.js,Sails Mongo,我尝试在SailsJS(v0.10)中执行以下操作: 因此,本质上我所做的是将文档从“开发”集合复制到“已发布”集合中,并保留“\u id”。具有相同的“\u id”非常重要,因为它允许更简单的未来操作,我可以将“开发”文档和“发布”文档视为一个文档(因此,“删除”调用只需要向其传递一个“\u id”值) 无论我做什么,我似乎都无法让它发挥作用。我曾尝试使用“native()”和“require('mongodb').ObjectID”,但“published”集合中的“\u id”总是重新生成
db.development.find({
_id: ObjectId(idToUseInBothCollections),
subscriberId: subscriber
}).forEach(function(doc) {
doc.status = 'published';
db.development.update({
_id: ObjectId(idToUseInBothCollections),
subscriberId: subscriber
}, {
$inc: {
version: 1
}
});
db.published.update({
developmentId: idToUseInBothCollections,
subscriberId: subscriber
}, doc, {
upsert: true
});
})
这是我现在在控制器中拼凑的实际代码:
var ObjectId = require('mongodb').ObjectID;
var toPublish = req.body.toPublish;
var subscriber = req.user.subscriber;
Development.findOne({
id: ObjectId(toPublish),
subscriberId: subscriber
}).exec(function(err, found) {
if (err) {
return res.json({
msg: 'Failed.'
});
}
found.status = 'published';
publish(found);
});
var publish = function(found) {
Development.native(function(err, development) {
development.update({
_id: ObjectId(toPublish),
subscriberId: subscriber
}, {
$inc: {
version: 1
}
}, function(err, updated) {
if (err) {
return res.json({
msg: 'Failed.'
});
} else {
//success
}
});
});
Published.native(function(err, published) {
published.update({
developmentId: toPublish,
subscriberId: subscriber
}, found, {
upsert: true
}, function(err, updatedpublished) {
if (err) {
return res.json({
msg: 'Failed.'
});
} else {
return res.json({
msg: 'Success'
});
}
});
});
};
是的,它是有效的,但我真的不明白为什么有必要这样做。我想知道,有没有一种方法可以在SailsJS中以不太混乱的方式执行我的首选查询?您解决了这个问题吗?恐怕没有。虽然我最终还是使用了“async.瀑布”使事情更易于管理。除此之外,我还在使用额外的“developmentId”字段。
var ObjectId = require('mongodb').ObjectID;
var toPublish = req.body.toPublish;
var subscriber = req.user.subscriber;
Development.findOne({
id: ObjectId(toPublish),
subscriberId: subscriber
}).exec(function(err, found) {
if (err) {
return res.json({
msg: 'Failed.'
});
}
found.status = 'published';
publish(found);
});
var publish = function(found) {
Development.native(function(err, development) {
development.update({
_id: ObjectId(toPublish),
subscriberId: subscriber
}, {
$inc: {
version: 1
}
}, function(err, updated) {
if (err) {
return res.json({
msg: 'Failed.'
});
} else {
//success
}
});
});
Published.native(function(err, published) {
published.update({
developmentId: toPublish,
subscriberId: subscriber
}, found, {
upsert: true
}, function(err, updatedpublished) {
if (err) {
return res.json({
msg: 'Failed.'
});
} else {
return res.json({
msg: 'Success'
});
}
});
});
};