一个简单的 mongo/monk findAndModify 查询问题
Issue with a simple mongo/monk findAndModify query
请注意,我是 mongo 的新手,尤其是 node/js.
的新手
我正在尝试编写查询以插入新文档或更新我的集合中的现有文档。
建议的集合结构是:
{ _id: xxxxxxx, ip: "xxx.xxx.xxx.xxx:xxxxxx", date: "xx-xx-xx xxxx" }
请注意,我的意图是为 _id 而不是内部 ObjectId 存储固定长度的 int(这是 possible/considered 不好的做法吗?)。 int 保证是唯一的并且来自另一个来源。
var monk = require('monk');
var db = monk('localhost:27017/cgo_schedule');
var insertDocuments = function(db, match) {
var db = db;
var collection = db.get('cgo_schedule');
collection.findAndModify(
{
"query": { "_id": match.matchId },
"update": { "$set": {
"ip": match.ip,
"date": match.date
},
"$setOnInsert": {
"_id": match.matchId,
}},
"options": { "new": true, "upsert": true }
},
function(err,doc) {
if (err) throw err;
console.log( doc );
}
);
}
但这根本不起作用。它不会向数据库中插入任何内容,但也不会出现任何错误,所以我不知道自己做错了什么。
输出(console.log (doc)
)为空。
我做错了什么?
Monk 文档没有太大帮助,但根据 source code,options
对象必须作为单独的参数提供。
因此您的调用应该如下所示:
collection.findAndModify(
{
"query": { "_id": match.matchId },
"update": {
"$set": {
"ip": match.ip,
"date": match.date
}
}
},
{ "new": true, "upsert": true },
function(err,doc) {
if (err) throw err;
console.log( doc );
}
);
请注意,我删除了 $setOnInsert
部分,因为 _id
始终包含在带有更新插入的插入中。
请注意,我是 mongo 的新手,尤其是 node/js.
的新手我正在尝试编写查询以插入新文档或更新我的集合中的现有文档。
建议的集合结构是:
{ _id: xxxxxxx, ip: "xxx.xxx.xxx.xxx:xxxxxx", date: "xx-xx-xx xxxx" }
请注意,我的意图是为 _id 而不是内部 ObjectId 存储固定长度的 int(这是 possible/considered 不好的做法吗?)。 int 保证是唯一的并且来自另一个来源。
var monk = require('monk');
var db = monk('localhost:27017/cgo_schedule');
var insertDocuments = function(db, match) {
var db = db;
var collection = db.get('cgo_schedule');
collection.findAndModify(
{
"query": { "_id": match.matchId },
"update": { "$set": {
"ip": match.ip,
"date": match.date
},
"$setOnInsert": {
"_id": match.matchId,
}},
"options": { "new": true, "upsert": true }
},
function(err,doc) {
if (err) throw err;
console.log( doc );
}
);
}
但这根本不起作用。它不会向数据库中插入任何内容,但也不会出现任何错误,所以我不知道自己做错了什么。
输出(console.log (doc)
)为空。
我做错了什么?
Monk 文档没有太大帮助,但根据 source code,options
对象必须作为单独的参数提供。
因此您的调用应该如下所示:
collection.findAndModify(
{
"query": { "_id": match.matchId },
"update": {
"$set": {
"ip": match.ip,
"date": match.date
}
}
},
{ "new": true, "upsert": true },
function(err,doc) {
if (err) throw err;
console.log( doc );
}
);
请注意,我删除了 $setOnInsert
部分,因为 _id
始终包含在带有更新插入的插入中。