В php я пытаюсь использовать функцию mont go changestream для просмотра состояния БД, после того, как следовал официальному руководству и запустил проект, он не работал, и не было никакого неправильного сообщения, отображаемого почему ... я использую centos 7 / php 5 / mongodb 4 /
$uri = 'mongodb://127.0.0.1:8017,127.0.0.1:8016/?replicaSet=rstest';
$collection = (new MongoDB\Client($uri))->test->webs;
$changeStream = $collection->watch();
for ($changeStream->rewind(); true; $changeStream->next()) {
if ( ! $changeStream->valid()) {
continue;
}
$event = $changeStream->current();
if ($event['operationType'] === 'invalidate') {
break;
}
$ns = sprintf('%s.%s', $event['ns']['db'], $event['ns']['coll']);
$id = json_encode($event['documentKey']['_id']);
switch ($event['operationType']) {
case 'delete':
printf("Deleted document in %s with _id: %s\n\n", $ns, $id);
break;
case 'insert':
printf("Inserted new document in %s\n", $ns);
echo json_encode($event['fullDocument']), "\n\n";
break;
case 'replace':
printf("Replaced new document in %s with _id: %s\n", $ns, $id);
echo json_encode($event['fullDocument']), "\n\n";
break;
case 'update':
printf("Updated document in %s with _id: %s\n", $ns, $id);
echo json_encode($event['updateDescription']), "\n\n";
break;
}
}
php -S 127.0.0.1:9001 PHP 5.6.40 Сервер разработки запущен в вторник, 28 апреля 22:20:14 2020 Прослушивание http://127.0.0.1: 9001 Документ root is / root / Desktop / ssedemo Нажмите Ctrl- C, чтобы выйти.
Когда я получаю "http://localhost: 9001 / demo. php", там ничего не отображается, и всегда в обновленном состоянии, нет неправильного сообщения ....
Тогда я использовал nodejs, чтобы это сделать, это сработало.
MongoClient.connect("mongodb://localhost:8017,localhost:8016?replicaSet=rstest")
.then(client => {
console.log("Connected correctly to server ");
// specify db and collections
const db = client.db("test");
const collection = db.collection("webs");
const changeStream = collection.watch(pipeline);
changeStream.on("change", function(change) {
console.log(changeStream);
console.log(change);
});