2011-11-05 12 views
6

Sử dụng mongoskin.NodeJS & Mongoskin, không thể cập nhật đơn giản. Đối số được truyền vào phải là 12 byte hoặc 24 chuỗi hex

Tôi đang cố gắng để làm một bản cập nhật đơn giản và tôi tiếp tục nhận được lỗi:

Lỗi: Đối số được thông qua năm phải là một chuỗi duy nhất của 12 byte hoặc một chuỗi 24 ký tự hex trong định dạng hex

đoạn mã khác nhau mà tôi đã cố gắng:

var mongo = require('mongoskin'), 
    store = mongo.db(MONGO_DB_ADDESS + ':' + MONGO_DB_PORT + '/' + MONGO_DB_NAME + '?auto_reconnect=false'); 

session._id = 4eb5444d39e153e60b000001; 

store.collection('sessions').updateById({_id : session._id}, {$set: status_obj}, {upsert : false, multi : false, safe : false}, function() { ... }); 

store.collection('sessions').updateById(session._id, {$set: status_obj});  

Thậm chí thử:

store.collection('sessions').update({'_id': session._id}, {$set: {"status":'unavailable'}});  

Bất kỳ trợ giúp nào được đánh giá cao!

Cảm ơn FYI, tôi có thể làm các bản cập nhật qua Mongo sử dụng cli tốt:

db.sessions.update({'_id': ObjectId('4eb5444d39e153e60b000001')}, {$set: {"status":'unavailable'}}); 

Trả lời

17
store.collection('sessions').updateById(session._id.toString(), {$set: status_obj}); 

Thêm ToString() cuối cùng đã giải quyết này cho tôi.

+0

Bạn có thể giải thích $ set bên trong {$ set: status_obj} làm gì không? – Sobiaholic

+0

Tập $ cho biết mongo chỉ cập nhật các thuộc tính bạn cung cấp. Nếu không có nó, bạn sẽ xóa bất kỳ thuộc tính nào không được chuyển đến bản cập nhật. –

3

Đã có một lỗi tương tự với Mongoose, nó bật ra id của tôi đã sai, nhưng có lẽ chức năng xác nhận này có thể giúp bạn:

function validate_id(id) { 
    return !(id !== null && (id.length != 12 && id.length != 24)); 
} 
1

đặt này trong thư mục gốc của javascript

ObjectID = require('mongoskin').ObjectID;

collection.updateById(new ObjectID(song._id), <json>, <callback>);

bạn đặt _id bạn nhận được trong nút vào Mongo định dạng cần

0

Bạn cũng có thể thử sử dụng trim() để loại bỏ khoảng trắng trước hoặc sau chuỗi, sẽ gây ra cùng một lỗi gốc:

store.collection('sessions').updateById(session._id.toString().trim(), {$set: status_obj}); 
Các vấn đề liên quan