查询中的Mongodb$数组不工作
下面是mongo db中文档的模式查询中的Mongodb$数组不工作,mongodb,mongodb-query,Mongodb,Mongodb Query,下面是mongo db中文档的模式 { "_id" : ObjectId("55d9a2f467d16f15a886a532"), "Author" : "RYTnirY", "Title" : "MZDCGMyXLV", "Content" : "HotEXFcyjaipabbAXAkKR", "Tags" : [ "oHE,SJx,FMQ" ], "CreatedAtUtc" : ISODate("2015-08-23
{
"_id" : ObjectId("55d9a2f467d16f15a886a532"),
"Author" : "RYTnirY",
"Title" : "MZDCGMyXLV",
"Content" : "HotEXFcyjaipabbAXAkKR",
"Tags" : [
"oHE,SJx,FMQ"
],
"CreatedAtUtc" : ISODate("2015-08-23T10:39:48.766Z"),
"Comments" : [
{
"Author" : "RWfSxDZ",
"Content" : "TvYfJzLtIeaIdrxdsbQ",
"CreatedAtUtc" : Date(-62135596800000)
},
{
"Author" : "RFmUqfD",
"Content" : "lHpUwrLnzXMSFtpGmo",
"CreatedAtUtc" : Date(-62135596800000)
}
]
}
我想查找所有带有特定标记的文档,例如仅oHE或oHE、SJx。我找不到正确的查询
db.poss.find({ Tags: { $in: { [ "oHE","SJx" ] } }})
您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因
您可以使用下面的代码将标记字符串转换为数组:
var cursor = db.poss.find();
while (cursor.hasNext()) {
var x = cursor.next();
var tags = x['Tags'][0];
print("Before: "+x['Tags']);
x['Tags'] = tags.split(',');
print("After: "+x['Tags']);
db.poss.update({_id : x._id}, x);
}
或
您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因
您可以使用下面的代码将标记字符串转换为数组:
var cursor = db.poss.find();
while (cursor.hasNext()) {
var x = cursor.next();
var tags = x['Tags'][0];
print("Before: "+x['Tags']);
x['Tags'] = tags.split(',');
print("After: "+x['Tags']);
db.poss.update({_id : x._id}, x);
}
或
您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因
您可以使用下面的代码将标记字符串转换为数组:
var cursor = db.poss.find();
while (cursor.hasNext()) {
var x = cursor.next();
var tags = x['Tags'][0];
print("Before: "+x['Tags']);
x['Tags'] = tags.split(',');
print("After: "+x['Tags']);
db.poss.update({_id : x._id}, x);
}
或
您将标记存储为单个数组项
[“oHE、SJx、FMQ”]
而不是多个项[“oHE”、“SJx、FMQ”]
,这就是查询无法工作的原因
您可以使用下面的代码将标记字符串转换为数组:
var cursor = db.poss.find();
while (cursor.hasNext()) {
var x = cursor.next();
var tags = x['Tags'][0];
print("Before: "+x['Tags']);
x['Tags'] = tags.split(',');
print("After: "+x['Tags']);
db.poss.update({_id : x._id}, x);
}
或
首先-将其改为
[“oHE”、“SJx”、“FMQ”]
,而不是[“oHE、SJx、FMQ”]
。
然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]}})
首先-使其[“oHE”,“SJx”,“FMQ”]
而不是[“oHE,SJx,FMQ”]
。
然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]}})
首先-使其[“oHE”,“SJx”,“FMQ”]
而不是[“oHE,SJx,FMQ”]
。
然后将查询更改为
db.poss.find({Tags:{$in:[“oHE”,“SJx”]}})
首先-使其[“oHE”,“SJx”,“FMQ”]
而不是[“oHE,SJx,FMQ”]
。
然后将查询更改为db.poss.find({Tags:{$in:[“oHE”,“SJx”]})
最好的方法是使用操作
var bulk=db.poss.initializeOrderedBulkOp(),
计数=0;
db.poss.find().forEach(函数(doc){
var tag=doc.Tags[0]。拆分(“,”);
bulk.find({“\u id”:doc.\u id}).updateOne({
“$set”:{“Tags”:tag}
});
计数++;
如果(计数%500==0){
//每500次操作执行一次并重新初始化
bulk.execute();
bulk=db.poss.initializeOrderedBulkOp();
}
})
//清理队列
如果(计数%500!=0)
bulk.execute()
然后,您的数据如下所示:
{
“_id”:ObjectId(“55d9a2f467d16f15a886a532”),
“作者”:“RYTnirY”,
“标题”:“MZDCGMyXLV”,
“内容”:“hotexfcyjaipabaxakkr”,
“标签”:[
“oHE”,
“SJx”,
“FMQ”
],
“CreatedAtUtc”:ISODate(“2015-08-23T10:39:48.766Z”),
“评论”:[
{
“作者”:“RWfSxDZ”,
“内容”:“TvYfJzLtIeaIdrxdsbQ”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
},
{
“作者”:“RFmUqfD”,
“内容”:“lHpUwrLnzXMSFtpGmo”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
}
]
}
现在您的查询:
db.poss.find({“Tags”:{“$in”:[“oHE”,“SJx”]})
最好的方法是使用操作
var bulk=db.poss.initializeOrderedBulkOp(),
计数=0;
db.poss.find().forEach(函数(doc){
var tag=doc.Tags[0]。拆分(“,”);
bulk.find({“\u id”:doc.\u id}).updateOne({
“$set”:{“Tags”:tag}
});
计数++;
如果(计数%500==0){
//每500次操作执行一次并重新初始化
bulk.execute();
bulk=db.poss.initializeOrderedBulkOp();
}
})
//清理队列
如果(计数%500!=0)
bulk.execute()
然后,您的数据如下所示:
{
“_id”:ObjectId(“55d9a2f467d16f15a886a532”),
“作者”:“RYTnirY”,
“标题”:“MZDCGMyXLV”,
“内容”:“hotexfcyjaipabaxakkr”,
“标签”:[
“oHE”,
“SJx”,
“FMQ”
],
“CreatedAtUtc”:ISODate(“2015-08-23T10:39:48.766Z”),
“评论”:[
{
“作者”:“RWfSxDZ”,
“内容”:“TvYfJzLtIeaIdrxdsbQ”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
},
{
“作者”:“RFmUqfD”,
“内容”:“lHpUwrLnzXMSFtpGmo”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
}
]
}
现在您的查询:
db.poss.find({“Tags”:{“$in”:[“oHE”,“SJx”]})
最好的方法是使用操作
var bulk=db.poss.initializeOrderedBulkOp(),
计数=0;
db.poss.find().forEach(函数(doc){
var tag=doc.Tags[0]。拆分(“,”);
bulk.find({“\u id”:doc.\u id}).updateOne({
“$set”:{“Tags”:tag}
});
计数++;
如果(计数%500==0){
//每500次操作执行一次并重新初始化
bulk.execute();
bulk=db.poss.initializeOrderedBulkOp();
}
})
//清理队列
如果(计数%500!=0)
bulk.execute()
然后,您的数据如下所示:
{
“_id”:ObjectId(“55d9a2f467d16f15a886a532”),
“作者”:“RYTnirY”,
“标题”:“MZDCGMyXLV”,
“内容”:“hotexfcyjaipabaxakkr”,
“标签”:[
“oHE”,
“SJx”,
“FMQ”
],
“CreatedAtUtc”:ISODate(“2015-08-23T10:39:48.766Z”),
“评论”:[
{
“作者”:“RWfSxDZ”,
“内容”:“TvYfJzLtIeaIdrxdsbQ”,
“CreatedAtUtc”:“2015年8月23日星期日15:22:04 GMT+0300(MSK)”
},