Bạn có thể muốn xem xét lại mô hình dữ liệu của mình. Như hiện tại, bạn không thể thực hiện được những gì mình muốn. Trường cảm biến đề cập đến một mảng. Ở định dạng tài liệu lý tưởng mà bạn đã cung cấp, bạn có một đối tượng bên trong mảng đó. Sau đó, bên trong đối tượng đó, bạn có hai trường với cùng một khóa. Trong một đối tượng JSON hoặc tài liệu mongo trong ngữ cảnh này, bạn không thể có các khóa trùng lặp trong cùng một đối tượng.
Không rõ chính xác bạn đang tìm kiếm gì ở đây, nhưng có lẽ tốt nhất là bạn nên tìm những thứ như thế này:
{
"_id" : "Manasa",
"name" : "Manasa Sub",
"sensors" : [
{
"sensor_name" : "ras",
"_id" : ObjectId("57da0a4bf3884d1fb2234c74"),
"measurements" : [
{
"time" : "8:00"
},
{
"time" : "9:00"
}
]
},
{
// next sensor in the sensors array with similar format
"_id": "",
"name": "",
"measurements": []
}],
}
Nếu đây là những gì bạn muốn, thì bạn có thể thử cách này:
User.findOneAndUpdate(
{ _id:req.body._id "sensors.sensor_name": req.body.sensor_name },
{ $push: { "sensors.0.measurements": { "time": req.body.time } } }
);
Và như một lưu ý phụ, nếu bạn chỉ lưu trữ một chuỗi duy nhất trong mỗi đối tượng trong mảng số đo, bạn có thể muốn chỉ lưu trữ các giá trị thực thay vì toàn bộ đối tượng { time: "value" }
. Bạn có thể thấy dữ liệu dễ dàng hơn để xử lý theo cách này.