Tôi có bộ sưu tập người đăng ký có chỉ mục duy nhất trên {LISTID:1, EMAIL:1}. Tôi muốn chèn một tài liệu không tồn tại và cập nhật nó nếu nó đã tồn tại, nhưng dù sao thì tôi cũng muốn lấy _id của tài liệu bất kể đó là phần chèn hay bản cập nhật.
$mongo = Mongo mới();
$db = $mongo->test;
$collection = $db->người đăng ký;
$criteria = array('LISTID' => 86, 'EMAIL' => 'opp20071980@gmail.com');
$data = array('LISTID' => 86, 'EMAIL' => 'opp20071980@gmail.com', 'FNAME' => 'Oleg');
$result = $collection->update($criteria, $data, array('fsync' => true, 'upsert' => true));
var_dump ($ dữ liệu);
var_dump($result);
Nếu tôi chèn một tài liệu, kết quả tôi nhận được là:
mảng
'LISTID' => int 86
'EMAIL' => chuỗi 'opp20071980@gmail.com' (length=21)
'FNAME' => chuỗi 'Oleg' (length=4)
mảng
'updateExisting' => boolean sai
'bực mình' =>
đối tượng(MongoId)[6]
công khai '$id' => chuỗi '506446e4e0dae94a0bd25d06' (length=24)
'n' => int 1
'Id kết nối' => int 10
'fsyncFiles' => int 7
'lỗi' => vô giá trị
'được' => thả nổi 1
Nhưng nếu cập nhật, tôi nhận được kết quả không có _id:
mảng
'LISTID' => int 86
'EMAIL' => chuỗi 'opp20071980@gmail.com' (length=21)
'FNAME' => chuỗi 'Oleg' (length=4)
mảng
'updateExisting' => boolean đúng
'n' => int 1
'Id kết nối' => int 10
'fsyncFiles' => int 7
'lỗi' => vô giá trị
'được' => thả nổi 1
Bạn có thể cho tôi biết cách lấy _id ngay cả khi bản ghi được cập nhật nhưng chưa được chèn không?
Vấn đề ở đây là MongoCollection.update()
sẽ không trở lại _id
(giống MongoCollection.insert()
Nếu trong cơ sở dữ liệu没有trận đấu, và của bạnupert=>đúng
, bạn sẽ ở trongCó một cáiNHẬN DẠNG
> phản đối
sự vật. nếu như有trận đấu, nó sẽ không.
Nếu bạn muốn cập nhật hoặc chèn một tài liệu, bạn có thể sử dụng tìmAndModify
lệnh và nâng cao
(Người trợ giúp được thêm vào trong v.1.3.0-Beta)
$mongo = Mongo mới();
$db = $m->mydatabase;
$query = array('LISTID' => 86, 'EMAIL' => 'opp20071980@gmail.com');
$update = array('$set' => array('LISTID' => 86, 'EMAIL' => 'opp20071980@gmail.com', 'FNAME' => 'Oleg') );
$kết quả = $db->lệnh(
mảng(
"findandmodify" => "test", / /tên bộ sưu tập
"truy vấn" => $truy vấn,
"cập nhật" => $cập nhật,
'upsert' => 1
)
);
Kết quả sẽ khác nhau ở 2 trường hợp, xem tại đây:
Bản ghi được tìm thấy, cập nhật:
Mảng
(
[giá trị] => Mảng
(
[_id] => Đối tượng MongoId
(
[$id] => 506470963e20d69457000000
)
[LISTID] => 86
[EMAIL] => opp20071980@gmail.com
)
[lastErrorObject] => Mảng
(
[đã cập nhậtHiện có] => 1
[n] => 1
)
[được] => 1
)
Không tìm thấy bản ghi nào, đã chèn:
Mảng
(
[giá trị] =>
[lastErrorObject] => Mảng
(
[đã cập nhậtHiện có] =>
[n] => 1
[đã xác nhận] => Đối tượng MongoId
(
[$id] => 5064708213995e82a829753e
)
)
[được] => 1
)
Bạn phải lấy nó ở hai nơi khác nhau _id
, tùy thuộc vào việc findAndModify chèn hay cập nhật tài liệu.
Tôi là một lập trình viên xuất sắc, rất giỏi!