Tôi có một bộ sưu tập người dùng, mỗi người trong số đó có thể được đăng ký một hoặc nhiều dịch vụ. Mỗi dịch vụ có một số dữ liệu meta, bao gồm số lượng tín dụng mà người dùng có cho dịch vụ đó.Ký tự đại diện dấu chấm Mongodb dot?
Làm cách nào để tìm tất cả các đối tượng người dùng có dưới 50 tín dụng cho một số dịch vụ nếu tôi không biết cách nào các khóa đối tượng dịch vụ sẽ là gì?
Về mặt lý thuyết, nó sẽ là một cái gì đó như thế này, mà không làm việc:
db.users.find({services.*.credits : {$lt : 50}})
Bộ sưu tập người dùng:
{
_id: 4f0ea25072139e4d2000001f,
services : {
a : { credits : 100, score : 2000 },
b : { credits : 200, score : 300 },
c : { credits : 10, score : 1300 }
}
},
{
_id: 4f0ea25072139e4d2000001f,
services : {
f : { credits : 68, score : 14 },
q : { credits : 1000, score : 102 },
z : { credits : 59, score : 352 }
}
}
Một ví dụ về những gì tôi muốn làm, trong trường hợp nó không phải rõ ràng ở đây, được giải thích tại đây: http://www.mongodb.org/display/DOCS/Advanced+Queries#comment-346075854
tôi đã kết thúc thay đổi schema của chúng tôi chỉ sử dụng một mảng. Tôi có thể đã sử dụng $ elemMatch, nhưng vì tôi chỉ cần khớp với một tiêu chí duy nhất, tôi có thể làm: 'db.users.find ({services.credits: {$ lt: 50}})' – stuporglue
-1 vì đây không phải là câu trả lời cho câu hỏi. Không phải ai cũng có khả năng thay đổi lược đồ dữ liệu mà họ đang làm việc. Câu hỏi này vẫn chưa được trả lời. – CommaToast
OK Tôi tự trả lời. Tìm thấy một cách để làm điều đó. Đăng dưới đây. – CommaToast