Mongoskin 查询使用变量作为查询键检查文档 $ 是否存在
Mongoskin query check if document $exists using a variable as Query Key
我想使用 Mongoskin 检查文档是否存在于 MongoDB 集合中,其中每个文档都有一个唯一键和一个数组作为其值。此代码完美运行:
db.collection('buyerRec').find({ "abcd" : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
...
});
找到 "abcd" 文档。然而,在实际的系统设计中,文档的查询键是事先不知道的,所以我需要用一个变量来代替"abcd"。我找不到有效的组合。在两种失败的情况下,它总是 returns 一个空数组-
失败示例 1:
console.log("idCode: " + typeof idCode + " " + idCode); // idCode: string abcd
db.collection('buyerRec').find({ idCode : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
...
});
失败示例 2:
console.log("idCode: " + typeof idCode + " " + idCode); // idCode: string abcd
var query = "\"" + idCode + "\"";
console.log("query: " + typeof query + " " + query); // query: string "abcd"
db.collection('buyerRec').find({ query : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
...
});
对我来说,这两个失败示例中的一个应该重复了第一个示例的预期操作。有人可以指导我如何重新编码吗?谢谢
我想你的问题可能是creating js object using variables for property name。您可以尝试以下操作:
fieldName = "abcd"
var query = {};
query[fieldName] = {"$exists": true};
db.collection('buyerRec').find(query)
但是上面的代码实际上并没有那么好,因为没有将fieldName作为参数传递。在我的 .mongorc.js(mongo shell 每次启动时都会加载 .mongorc.js),我为这种情况编写函数,仅供参考。
DBCollection.prototype.has = function(fieldName) {
var query = {}; // construct a empty object
query[fieldName] = {"$exists": true};
return db.getCollection(this._shortName).find(query).pretty();
}
然后你可以像这样写查询:
db.buyerRec.has("abc") // in mongo shell
但是,我认为您实际上必须编写自己的函数,因为我的函数只是专注于检查某个键是否存在。
总之,希望对你有帮助。
我想使用 Mongoskin 检查文档是否存在于 MongoDB 集合中,其中每个文档都有一个唯一键和一个数组作为其值。此代码完美运行:
db.collection('buyerRec').find({ "abcd" : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
...
});
找到 "abcd" 文档。然而,在实际的系统设计中,文档的查询键是事先不知道的,所以我需要用一个变量来代替"abcd"。我找不到有效的组合。在两种失败的情况下,它总是 returns 一个空数组-
失败示例 1:
console.log("idCode: " + typeof idCode + " " + idCode); // idCode: string abcd
db.collection('buyerRec').find({ idCode : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
...
});
失败示例 2:
console.log("idCode: " + typeof idCode + " " + idCode); // idCode: string abcd
var query = "\"" + idCode + "\"";
console.log("query: " + typeof query + " " + query); // query: string "abcd"
db.collection('buyerRec').find({ query : { $exists : true }}, { _id:0 }).toArray(function(err, doc) {
...
});
对我来说,这两个失败示例中的一个应该重复了第一个示例的预期操作。有人可以指导我如何重新编码吗?谢谢
我想你的问题可能是creating js object using variables for property name。您可以尝试以下操作:
fieldName = "abcd"
var query = {};
query[fieldName] = {"$exists": true};
db.collection('buyerRec').find(query)
但是上面的代码实际上并没有那么好,因为没有将fieldName作为参数传递。在我的 .mongorc.js(mongo shell 每次启动时都会加载 .mongorc.js),我为这种情况编写函数,仅供参考。
DBCollection.prototype.has = function(fieldName) {
var query = {}; // construct a empty object
query[fieldName] = {"$exists": true};
return db.getCollection(this._shortName).find(query).pretty();
}
然后你可以像这样写查询:
db.buyerRec.has("abc") // in mongo shell
但是,我认为您实际上必须编写自己的函数,因为我的函数只是专注于检查某个键是否存在。 总之,希望对你有帮助。