(self)
| 643 | self.assertNotEqual({}, stage) |
| 644 | |
| 645 | def test_field_selection(self): |
| 646 | db = self.db |
| 647 | db.drop_collection("test") |
| 648 | |
| 649 | doc = {"a": 1, "b": 5, "c": {"d": 5, "e": 10}} |
| 650 | db.test.insert_one(doc) |
| 651 | |
| 652 | # Test field inclusion |
| 653 | doc = next(db.test.find({}, ["_id"])) |
| 654 | self.assertEqual(list(doc), ["_id"]) |
| 655 | doc = next(db.test.find({}, ["a"])) |
| 656 | l = list(doc) |
| 657 | l.sort() |
| 658 | self.assertEqual(l, ["_id", "a"]) |
| 659 | doc = next(db.test.find({}, ["b"])) |
| 660 | l = list(doc) |
| 661 | l.sort() |
| 662 | self.assertEqual(l, ["_id", "b"]) |
| 663 | doc = next(db.test.find({}, ["c"])) |
| 664 | l = list(doc) |
| 665 | l.sort() |
| 666 | self.assertEqual(l, ["_id", "c"]) |
| 667 | doc = next(db.test.find({}, ["a"])) |
| 668 | self.assertEqual(doc["a"], 1) |
| 669 | doc = next(db.test.find({}, ["b"])) |
| 670 | self.assertEqual(doc["b"], 5) |
| 671 | doc = next(db.test.find({}, ["c"])) |
| 672 | self.assertEqual(doc["c"], {"d": 5, "e": 10}) |
| 673 | |
| 674 | # Test inclusion of fields with dots |
| 675 | doc = next(db.test.find({}, ["c.d"])) |
| 676 | self.assertEqual(doc["c"], {"d": 5}) |
| 677 | doc = next(db.test.find({}, ["c.e"])) |
| 678 | self.assertEqual(doc["c"], {"e": 10}) |
| 679 | doc = next(db.test.find({}, ["b", "c.e"])) |
| 680 | self.assertEqual(doc["c"], {"e": 10}) |
| 681 | |
| 682 | doc = next(db.test.find({}, ["b", "c.e"])) |
| 683 | l = list(doc) |
| 684 | l.sort() |
| 685 | self.assertEqual(l, ["_id", "b", "c"]) |
| 686 | doc = next(db.test.find({}, ["b", "c.e"])) |
| 687 | self.assertEqual(doc["b"], 5) |
| 688 | |
| 689 | # Test field exclusion |
| 690 | doc = next(db.test.find({}, {"a": False, "b": 0})) |
| 691 | l = list(doc) |
| 692 | l.sort() |
| 693 | self.assertEqual(l, ["_id", "c"]) |
| 694 | |
| 695 | doc = next(db.test.find({}, {"_id": False})) |
| 696 | l = list(doc) |
| 697 | self.assertNotIn("_id", l) |
| 698 | |
| 699 | def test_options(self): |
| 700 | db = self.db |
nothing calls this directly
no test coverage detected