2015-06-04 12 views
6

Số liệu được đưa ra như sau:MongoDB: Không thể canonicalize truy vấn: BADVALUE chưa biết khai thác

{ 
    "_id" : { "$oid" : "546b79a2e4b0f7bfbaa97cc7" }, 
    "title" : "Eyewitness: Highlands, Scotland", 
    "description" : "Photographs from the Guardian Eyewitness series", 
    "timeStamp" : "14/11/2014", 
    "category" : "news", 
    "url" : "http://www.theguardian.com/world/picture/2014/nov/14/1", 
    "source" : "http://www.theguardian.com/", 
    "mainStory" : "\n", 
    "keywords" : [ "Wildlife", "Scotland" ] 
} 

Nhưng khi tôi sử dụng lệnh sau đây để tìm một cái gì đó, lỗi đi ra

db.guardian.find({ "_id": {"$oid": '546b79a2e4b0f7bfbaa97cc7'}}) 

Làm thế nào tôi có thể tìm thấy tài liệu với $oid cụ thể.

Trả lời

5

Bạn cần phải chuyển đổi chuỗi id để một ObjectId như thế này:

db.guardian.find({ "_id": ObjectId("546b79a2e4b0f7bfbaa97cc7") }) 

Lý do được rằng { "$oid" : "546b79a2e4b0f7bfbaa97cc7"} cũng giống như ObjectId("546b79a2e4b0f7bfbaa97cc7") chỉ trong một định dạng khác nhau.

Tham khảo docs để biết thêm chi tiết.

+1

Đó là thật sự tốt đẹp – Wyatt

+0

Nếu bạn đang sử dụng nodejs thì bạn cũng cần phải yêu cầu ObjectId với var ObjectId = require ('MongoDB') ObjectId. – strttn

1

Bạn có thể thêm vào dưới đây phương pháp lớp để mô hình của bạn

def self.serialize_from_session(key, salt) 
    (key = key.first) if key.kind_of? Array 
    (key = BSON::ObjectId.from_string(key['$oid'])) if key.kind_of? Hash 

    record = to_adapter.get(key) 
    record if record && record.authenticatable_salt == salt 
end 

def self.serialize_into_session(record) 
    [record.id.to_s, record.authenticatable_salt] 
end 
Các vấn đề liên quan