cuốn sách gpt4 ai đã làm

php - Lấy _id của tài liệu mongodb mà chúng tôi đã chèn nếu nó không tồn tại, cập nhật nếu nó đã tồn tại

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 10:34:08 28 4
mua khóa gpt4 Nike

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?

câu trả lời hay nhất

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.

Về php - lấy _id của tài liệu mongodb mà chúng tôi đã chèn nếu nó không tồn tại và cập nhật nó nếu nó đã tồn tại, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/12620392/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress