MongoDB, Monk, findAndModify 没有升级
MongoDB, Monk, findAndModify not upserting
我在一个节点项目中有这个功能,它应该根据 slug 是否匹配来更新或创建一个新条目。它更新完美,所以返回的响应是正确的,但它不会插入新项目,我不确定我错过了什么。
MongoDB 版本 3.0.4(通过 Homebrew 安装)
Mac OSX Yosemite
MongoDB 节点包 2.0.39
和尚 1.0.1
collection.findAndModify({
"query": { "slug": pluginslug },
"update":
{
"slug" : pluginslug,
"name" : response.data.name,
"current_version" : response.data.version,
"description" : response.data.short_description,
"change_log" : response.data.sections.changelog,
"updated" : response.data.last_updated,
"tested" : response.data.tested
},
"upsert" :true,
"new" : true
}, function (err, doc) {
if (err) {
res.send("There was a problem adding the information to the database.");
}
else {
console.log(doc)
res.redirect("plugins/new");
}
});
我是不是漏掉了一些很明显的东西?
试试这个:
collection.findAndModify({
"query": { "slug": pluginslug },
"update":
{
$set:{
"slug" : pluginslug,
"name" : response.data.name,
"current_version" : response.data.version,
"description" : response.data.short_description,
"change_log" : response.data.sections.changelog,
"updated" : response.data.last_updated,
"tested" : response.data.tested
}
},
"upsert" :true,
"new" : true
}, function (err, doc) {
if (err) {
res.send("There was a problem adding the information to the database.");
}
else {
console.log(doc)
res.redirect("plugins/new");
}
});
请尝试 运行 此代码:
"use strict";
var mongojs = require("mongojs");
var collections = ["test"];
var db = mongojs('test', collections);
db.on('error', console.error.bind(console, 'connection error:'));
db.test.findAndModify({
"query": { "slug": "1234512345" },
"update":
{
"slug" : "1234512345",
"name" : "response.data.name",
"current_version" : "response.data.version",
"description" : "response.data.short_description",
"change_log" : "response.data.sections.changelog",
"updated" : "response.data.last_updated",
"tested" : "response.data.teste"
},
"upsert" :true,
"new" : true
}, function (err, doc) {
if (err) {
console.log(err);
}
else {
console.log(doc);
}
});
试试下面的方法
router.post('/login/:id', jsonParser, function (req, res) {
var db = req.db;
var collection = db.get('user');
console.log(req.body);
collection.findAndModify({userid : req.params.id}, { $set: req.body } , {upsert : true}, function (err, result) {
console.log(err);
res.send(
(err === null) ? {msg: 'success'} : {msg: 'error: ' + err}
);
});
});
我在这里找到了正确答案:
解决方案是将选项作为自己的对象提供(僧侣文档没有很好地记录):
db.test.findAndModify(
{
"query": { "slug": "1234512345" },
"update":
{
"$set":
{
"slug" : "1234512345",
"name" : "response.data.name",
"current_version" : "response.data.version",
"description" : "response.data.short_description",
"change_log" : "response.data.sections.changelog",
"updated" : "response.data.last_updated",
"tested" : "response.data.teste"
}
}
},
{
"upsert" :true,
"new" : true
},
function (err, doc) {
if (err) {
console.log(err);
}
else {
console.log(doc);
}
});
这个答案可能为时已晚,但我只是偶然发现了这个问题并且遇到了类似的问题,这对我有用:
collection.findAndModify(
{ "slug": pluginslug }
,[]
,{
$set:{
"slug" : pluginslug,
"name" : response.data.name,
"current_version" : response.data.version,
"description" : response.data.short_description,
"change_log" : response.data.sections.changelog,
"updated" : response.data.last_updated,
"tested" : response.data.tested
}
}
,{"upsert" :true,"new" : true}
, function (err, doc) {
//..something here...
});
findAndModify 方法文档 here 应该有所帮助。
我在一个节点项目中有这个功能,它应该根据 slug 是否匹配来更新或创建一个新条目。它更新完美,所以返回的响应是正确的,但它不会插入新项目,我不确定我错过了什么。
MongoDB 版本 3.0.4(通过 Homebrew 安装) Mac OSX Yosemite MongoDB 节点包 2.0.39 和尚 1.0.1
collection.findAndModify({
"query": { "slug": pluginslug },
"update":
{
"slug" : pluginslug,
"name" : response.data.name,
"current_version" : response.data.version,
"description" : response.data.short_description,
"change_log" : response.data.sections.changelog,
"updated" : response.data.last_updated,
"tested" : response.data.tested
},
"upsert" :true,
"new" : true
}, function (err, doc) {
if (err) {
res.send("There was a problem adding the information to the database.");
}
else {
console.log(doc)
res.redirect("plugins/new");
}
});
我是不是漏掉了一些很明显的东西?
试试这个:
collection.findAndModify({
"query": { "slug": pluginslug },
"update":
{
$set:{
"slug" : pluginslug,
"name" : response.data.name,
"current_version" : response.data.version,
"description" : response.data.short_description,
"change_log" : response.data.sections.changelog,
"updated" : response.data.last_updated,
"tested" : response.data.tested
}
},
"upsert" :true,
"new" : true
}, function (err, doc) {
if (err) {
res.send("There was a problem adding the information to the database.");
}
else {
console.log(doc)
res.redirect("plugins/new");
}
});
请尝试 运行 此代码:
"use strict";
var mongojs = require("mongojs");
var collections = ["test"];
var db = mongojs('test', collections);
db.on('error', console.error.bind(console, 'connection error:'));
db.test.findAndModify({
"query": { "slug": "1234512345" },
"update":
{
"slug" : "1234512345",
"name" : "response.data.name",
"current_version" : "response.data.version",
"description" : "response.data.short_description",
"change_log" : "response.data.sections.changelog",
"updated" : "response.data.last_updated",
"tested" : "response.data.teste"
},
"upsert" :true,
"new" : true
}, function (err, doc) {
if (err) {
console.log(err);
}
else {
console.log(doc);
}
});
试试下面的方法
router.post('/login/:id', jsonParser, function (req, res) {
var db = req.db;
var collection = db.get('user');
console.log(req.body);
collection.findAndModify({userid : req.params.id}, { $set: req.body } , {upsert : true}, function (err, result) {
console.log(err);
res.send(
(err === null) ? {msg: 'success'} : {msg: 'error: ' + err}
);
});
});
我在这里找到了正确答案:
解决方案是将选项作为自己的对象提供(僧侣文档没有很好地记录):
db.test.findAndModify(
{
"query": { "slug": "1234512345" },
"update":
{
"$set":
{
"slug" : "1234512345",
"name" : "response.data.name",
"current_version" : "response.data.version",
"description" : "response.data.short_description",
"change_log" : "response.data.sections.changelog",
"updated" : "response.data.last_updated",
"tested" : "response.data.teste"
}
}
},
{
"upsert" :true,
"new" : true
},
function (err, doc) {
if (err) {
console.log(err);
}
else {
console.log(doc);
}
});
这个答案可能为时已晚,但我只是偶然发现了这个问题并且遇到了类似的问题,这对我有用:
collection.findAndModify(
{ "slug": pluginslug }
,[]
,{
$set:{
"slug" : pluginslug,
"name" : response.data.name,
"current_version" : response.data.version,
"description" : response.data.short_description,
"change_log" : response.data.sections.changelog,
"updated" : response.data.last_updated,
"tested" : response.data.tested
}
}
,{"upsert" :true,"new" : true}
, function (err, doc) {
//..something here...
});
findAndModify 方法文档 here 应该有所帮助。